《JavaScript高级程序设计》读书笔记 2
1,动态模型模式
1 function Person (name,age,job) { 2 this.name=name; 3 this.age=age; 4 this.job=job; 5 if(typeof this.sayName!='function'){ 6 Person.prototype.sayName = function(){ 7 alert(this.name); 8 } 9 } 10 } 11 var friend=new Person('Nicholas',29,'Software Engineer'); 12 friend.sayName();
在构造函数中初始化原型,同时保证了构造函数和原型的优点。这只会在初次调用构造函数时才会执行。
2,寄生构造函数模式
1 function SpecialArray(){ 2 //创建数组。 3 var values=new Array(); 4 //添加值。 5 values.push.apply(values,arguments); 6 //添加方法 7 values.toPipedString=function(){ 8 return this.join("|"); 9 }; 10 return values; 11 } 12 var colors=new SpecialArray("red","blues","green"); 13 alert(colors.toPipedString());
假设我们想创建一个具有额外方法的的特殊数组。由于不能直接修改Array构造函数,因此可以使用这个模式。
寄生的构造函数和构造函数的原型的原型属性没有关系。也就是说构造函数返回的对象与构造函数外部创建的对象没有什么不同。所以不能用instanceof 来确定对象类型。
3,委托构造函数模式
1 function Person(name,age,job){ 2 var o=new Object(); 3 o.sayName=function(){ 4 alert(name); 5 } 6 return o; 7 }
委托对象是指没有公共构造属性,而且其方法也不引用this的对象。委托对象最适合在安全的环境中,或者防止数据被其他程序改动的时候用。
委托构造函数和寄生构造函数的亮点不同是:a,新创建对象的实例不用this,b,不使用操作符来调用构造函数。
注意,这个对象,除了使用sayName()方法,没有其他方法可以访问name的值。