-
工厂模式:(缺点:无法知道一个函数的类型
function createPerson(name,age){ var o=new Object(); o.name=name; o.age=age; o.sayName=function(){ alert(this.name); } return o; } var person1=createPerson('andy',11);
-
构造函数模式(优点:没有显式创建对象,this会指向新对象,直接将属性和方法赋给this
function Person(name,age){ this.name=name; this.age=age; this.sayName=function(){ alert(this.name); } } var person1=new Person('andy',11);
-
原型模式
function person(){} Person.prototype.name='Frank'; Person.prototype.sayName=function(){ alert(this.name); } var person1=new Person(); var person2=new Person(); //此时person1和person2访问的都是同一组属性和方法
-
构造函数模式组合原型模式
function Person(name,age){ this.name=name; this.age=age; } Person.prototype={ constructor:Person, sayName(){ alert(this.name); } }
-
动态原型模式
function Person(name,age){ this.name=name; this.age=age; if(typeof this.sayname!='function'){ Person.prototype.sayName=function(){ alert(this.name); } } }
-
寄生构造函数模式
function Person(name,age){ var o=new Object(); o.name=name; o.age=age; o.sayName=function(){ alert(this.name); } return o; } var friend=new Person('Frank',11); //创建的friend除了sayName外没有其他方式访问name