1.使用object建立例項,然後為例項新增屬性和方法
var person=new object();
person.name="lalal";
person.age=28;
person.sayname=function();
缺點:如果要建立多個person,那麼就要為每個person建立相同的屬性和方法,較為繁瑣。
2.工廠模式
function createperson(name,age);
return o;
建立物件時為:
var person1=createperson("lalal",23);
var person2=createperson("ninil",25);
alert(person1.sayname==person2.sayname);//false
缺點:對於每個例項,都建立了乙個sayname方法,而且也不能判斷例項的型別
3.建構函式模式
function createperson(name,age)
this.name=name;
this.age=age;
this.sayname=function();
建立物件時:var person1=new createperson("lala",23);
但是使用這種方式只解決了判斷出例項person1的型別是createperson,但是對每個例項仍然還是重新建立了乙個方法;
4.原型模式
建構函式的原型物件中儲存了例項共享的屬性或方法。
function person(){}
person.prototype.name="lalala";
person.prototype.age=23;
person.prototype.sayname=function();
建立物件時:
var person1=new person();
但是這樣建立的例項的屬性是一樣的,如果屬性值為基本值時,可以通過重新定義例項的同名屬性來遮蔽原型中的屬性;
person1.name="eowh";
person1.sayname();//"eowh"
但是如果屬性值為引用值時,如果其中乙個例項修改引用值,那麼其他例項的引用值也會隨之更改.
person.prototype.friends=["1","2","3"];
person1.friends.push("4");
var person2=new person();
alert(person2.friends);//1,2,3,4
對於陣列型的引用值也可以通過定義例項的該屬性進行遮蔽原型物件中的該屬性。
5.組合建構函式和原型模式
將例項共享的屬性放在建構函式中定義,而共享的方法則放在原型物件中定義
function person(name,age)
this.name=name;
this.age=age;
person.prototype.sayname=function();
建立物件時:
var person1=new person("lalal",23);
通常情況下使用這種方法來進行建立物件。且如果方法較多時,可以使用物件字面量形式來建立
person.prototype=
}但是用上述方式來寫的時候,一定要記住要重新定義constructor屬性,因為使用物件字面量形式來定義原型物件就是重新寫了乙個原型物件,而不是在建立建構函式時自動生成的原型物件了,那麼新的原型物件的constructor就不再指向person了,而且例項的[[prototype]]也不再指向原始的原型物件,而是指向了新的原型物件。
6.動態原型模式
由於學習其他物件導向語言的可能不太理解為什麼將建構函式和原型物件分開,所以可以在建構函式中初始化原型物件
function person(name,age)
this.name=name;
this.age=age;
if(typeof this.sayname!="function")
person.prototype.sayname=function()
}這裡不能使用物件字面量來定義,因為會切斷例項與原型物件之間的關係,而且這裡只有當初次使用person進行建立例項時,才會判斷原型物件中是否有該方法。
7.寄生建構函式模式
它與工廠模式一樣,但是在建立物件時要使用new關鍵字,因此,它建立的例項與建構函式、建構函式的原型物件都沒有關係。所以不能使用instanceof來判斷物件的型別。只有在特殊情況下,我們才會使用這種方式來建立建構函式,如:我們需要使用一種特殊的陣列物件,這個物件有一種特有方法,所以我們使用以下:
function specialarray();
return a;
建立物件時為:var a1=new specialarray("dfs");
8.穩妥建構函式模式
穩妥建構函式模式與寄生建構函式模式類似,但是穩妥建構函式例項物件的方法中不使用this,建立時不使用new。只有在要求安全的地方使用。
function person(name,age)
var o=new object();
o.name=name;
o.age=age;
o.sayname=function();
return o;
建立時為:var person1=person("bfdg",34);
使用instanceof操作符有效的:
建構函式模式
原型模式
組合建構函式與原型模式
動態原型模式
javascript建立物件總結
1.工廠模式 function createperson name,age,job return o var person1 createperson jack 25,software engineer var person2 createperson rose 24,doctor 工廠模式解決了建...
C 總結 動態建立物件
動態建立物件 2019 5 9 int p new int 不設定初值 對於自定義物件,呼叫預設無參建構函式 int p new int 設定初值為0,對於自定義物件,呼叫含參建構函式 int p new int 2 設定初值為2 釋放記憶體 delete p int prt new int 5 不...
物件導向(建立物件) 七種模式總結
工廠模式 工廠模式雖然解決了建立多個相似物件的問題,但卻沒有解決物件識別的問題 即怎樣知道乙個物件的型別 function createperson name,age,job return o var person1 createperson nicholas 29,software enginee...