標籤:
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的值。
《JavaScript進階程式設計》讀書筆記 2