javascript面向对象——创建对象的几种方式

1.字面值

var person = {
    name:'jack',
    age:20
};

1.通过new关键词

 var persons = new Object();
 persons.firstname = 'john';
 persons.lastname = 'Doe';
 persons.age = 50 ;

3.create来创建,通常该方法用来创建继承对象

 var child = Object.create(persons); //继承父类的属性
 child.name = 'jack';
 child.sex = 'nan';
 console.log(child);

创建对象的高级方法
1.工厂模式

  function createPerson(name,age) {
       return{
           name:name,
           age:age,
           sayHei:function () {
               return name + age;
           }
       }
   }

   let p1 = createPerson('jack','18');

工厂模式创建的对象1.在一个函数内部生成、2.并不能解决资源占用的问题 3、方法名小写

2.构造函数模式

 function CreatePerson(name,age) {
     this.name = name;
     this.age = age;
     this.sayHei = function () {
         return this.name + this.age;
     }
 }
 let p1 = new createPerson('jack',18);

构造模式创建的对象:
1.通过new来调用这个函数
2.this指的是对象的原型实例
3.构造模式的方法命名采用pascal命名法,每个单词首字母大写
4.也不能解决资源占用的问题

3.原型模式
么个对象下面都有一个Prototype原型对象,解决了资源占用问题,但当成员为引用类型时会有问题

 function person() {}
 person.prototype.name = 0;
 person.prototype.age = 0;
 person.prototype.sayHei = function () {
     return this.name + this.age;
 }
 let p1 = new person();
 person.prototype.name = 'jack';
 person.prototype.age =20;

4.混合模式
构造模式+原型模式
实现了属性专享,方法共享
即解决资源占用问题,也解决成员为引用类型的问题

 function person(name,age) {
     this.name = name;
     this.age = age;
 }
 person.prototype.sayHei = function () {
     return this.name + this.age;
 }

 let p = new person('jack',18);

你可能感兴趣的:(JavaScript晋级)