動態原型模型 組合使用構造函數模型和原型模型,使得OO語言程式員在看到獨立的構造函數和原型時很困惑。動態原型模型致力於解決該問題,它把所有的信息封裝在構造函數中,通過在構造函數中初始化原型(僅在必要情況下),同時又使用構造函數和原型的優點。 實例代碼如下: 寄生構造函數模型 基本思想:創建一個函數, ...
動態原型模型
組合使用構造函數模型和原型模型,使得OO語言程式員在看到獨立的構造函數和原型時很困惑。動態原型模型致力於解決該問題,它把所有的信息封裝在構造函數中,通過在構造函數中初始化原型(僅在必要情況下),同時又使用構造函數和原型的優點。
實例代碼如下:
<!DOCTYPE html> <html> <head> <title>動態原型模型</title> <script type="text/javascript"> //動態原型模型:把所有的信息封裝在構造函數中。通過在構造函數中初始化原型(僅在必要情況),又保持了同時使用構造函數和原型模型的優點。 function Student(name,age,sex){ this.name=name; this.age=age; this.sex=sex; this.friends=["Kitty","Court"]; if(typeof this.sayName!="function"){ //不能使用對象字面量重寫原型 Student.prototype.sayName=function(){ alert(this.name); }; } } var stu1=new Student("Lucy",10,"girl"); stu1.sayName(); var stu2=new Student("Bob",9,"boy"); stu2.sayName(); stu1.friends.push("Van"); alert(stu1.friends);//"Kitty,Court,Van" alert(stu2.friends);//"Kitty,Court" alert(stu1.friends===stu2.friends);//false alert(stu1.sayName===stu2.sayName);//true </script> </head> <body> </body> </html>
寄生構造函數模型
基本思想:創建一個函數,該函數作用僅僅是封裝創建對象的代碼,然後返回新創建的對象。
以下代碼說明該模型基本思想:
<!DOCTYPE html> <html> <head> <title>寄生構造函數模型</title> <script type="text/javascript"> function Student(name,age,sex){ var o=new Object(); o.name=name; o.age=age; o.sex=sex; o.friends=["Kitty","Court"]; o.sayName=function(){ alert(this.name); }; return o; } var stu1=new Student("Lucy",10,"girl"); stu1.sayName(); alert(stu1 instanceof Student); //false alert(stu1 instanceof Object);//true </script> </head> <body> </body> </html>
註:返回的對象與構造函數或者與構造函數的原型屬性之間沒有任何關係;即:構造函數返回的對象與在構造函數外部創建的對象沒什麼不同。不能依賴instanceof操作符來確定對象類型。
這種模式常用在特殊情況下為對象創建構造函數。