一、工廠模式 function createStudent(name,age){ var o=new Object(); o.name=name; o.age=age; o.myName=function(){ alert(this.name); }; return o; } var student
一、工廠模式
function createStudent(name,age){ var o=new Object(); o.name=name; o.age=age; o.myName=function(){ alert(this.name); }; return o; } var student1 =createStudent('yjj',15); var student2 = createStudent('fff',18); //問題: 工廠模式沒有解決對象識別的問題,不能確定一個對象的類型
二、構造函數模式
function Student(name,age){ this.name=name; this.age=age; this.myName=function(){ alert(this.name); }; } var student1_ = new Student('yjj',15); var student2_ = new Student('fff',18); //new 關鍵字的作用 //1.創建一個對象 //2.將構造函數的作用域賦給新對象,this指向了新對象 //3.執行構造函數中的代碼,為新對象添加熟悉 //4.返回新對象 //問題: 每個方法都要在每個實例上重新創建一遍
三、構造函數模式+原型模式
function Student(name,age){ this.name=name; this.age=age; } Student.prototype.myName=function(){ alert(this.name); }; var student1__ = new Student('yjj',15); var student2__ = new Student('fff',18); student1__.myName();
四、動態原型模式
function Student(name,age){ this.name=name; this.age=age; if(typeof this.myName!="function"){//第一次進入 Student.prototype.myName=function(){ alert(this.name); }; } } var student1___ = new Student('yjj',15); student1___.myName();
五、寄生構造函數模式
function Student(name,age){ var o = new Object(); o.name=name; o.age=age; o.myName=function(){ alert(this.name); }; return o; } var student1____ = new Student('yjj',15); student1____.myName(); //這種模式的基本思想是創建一個函數,該函數的作用僅僅是封裝創建對象的代碼,然後再返回新創建的對象。
六、穩妥構造函數模式
function Student(name,age){ var o = new Object(); var name=name; var age=age; o.myName=function(){ alert(name); }; return o; } var student1_____ = new Student('yjj',15); student1_____.myName(); //沒有公共屬性,而且其他方法也不用引用this的對象