//对象创建模式
//方式一:Object构造函数模式

var p=new Object();
 p.name='Tom';
 p.age=12;
 p.setName=function (name){
     this.name=name;
 }
 p.setName('Jack');
 console.log(p.name,p.age);



//方式二:对象字面量
var p={
    name:'Tom',
    age:12,
    setName:function (name){
        this.name=name;
    }
};

console.log(p.name,p.age);



//方式三:工厂模式:通过工厂函数动态创建对象并返回。(缺点:不能确定对象的具体类型)

   function createPerson(name,age){
           var obj={
               name:name,
               age:age,
               setName:function(){
                   this.name=name;
               }

           };
           return obj;
   }


   var p1=createPerson('zain',12);
   var p2=createPerson('Bob',13);


//方式四:自定义构造函数模式(当创建多个对象有相同数据,浪费内存,可以把共有的东西放在原型里。看方式5)
   function Person(name,age){
       this.name=name;
       this.age=age;
       this.setName=function (name){
              this.name=name;
       }
   }

   var p1=new Person('Tom',12);

   function Student(name,price){
          this.name=name;
          this.price=price;

   }

   var s1=new Student("Bob",12000);


   //方式5:构造函数+原型的组合模式

   function Person(name,age){
         this.name=name;
         this.age=age;
   }

    Person.prototype.setName=function (name){
          this.name=name;
    }
   var p1=new Person('Tom',12);
   var p2=new Person('Jack',13);
    console.log(p1,p2);

 

sometimes the hardest part isn't letting go,but rather start over