深入理解物件之建立物件:
工廠模式:
工廠模式雖然解決了建立\多個相似物件的問題,但卻沒有解決物件識別的問題(即怎樣知道乙個物件的型別)
工廠模式問題:
那就是識別問題,因為根本無法
搞清楚他們到底是哪個物件的例項。
建構函式模式:
js中可以自定義建構函式,從而自定義物件型別的屬性和方法,建構函式本身也是函式,只不過可以用來建立物件
建構函式的問題
每個方法都需要在每個例項上重新建立一遍,但是毫無必要。
可以在全域性範圍中宣告乙個函式,然後將引用傳遞給物件中的函式屬性。但是這樣做會導致全域性函式過多,體現不了物件的封裝性
建立自定義的建構函式意味著將來可以將它的例項標識為一種特定的型別;而這正是建構函式模式勝過工廠模式的地方。
原型模式:
每個函式都有乙個屬性:prototype(原型屬性
),這個屬性是乙個指標,指向乙個物件,該物件的用途是包含原型模式:
由特定型別的所有例項共享的屬性和方法
每個函式都有乙個屬性:prototype(原型屬性
),這個屬性是乙個指標,指向乙個物件,該物件的用途是包含可以由特定型別的所有例項共享的屬性和方法
原生模式問題:
所有例項在預設情況下都將取得相同的屬性值,這種共享對於函式來說非常合適,但是包含引用資料型別的值就不太好(一改都改
)
組合使用建構函式模式和原型模式:
constructor屬性和
prototype
屬性的關係:
建立了自定義的建構函式之後,其原型物件缺省會取得constructor屬性;當呼叫建構函式建立乙個新例項後,該例項的內部將包含乙個指標(內部屬性),指向建構函式的原型物件。(指向的是原型物件而不是建構函式)
每個函式都有乙個屬性:prototype(原型屬性
),這個屬性是乙個指標,指向乙個(原型
)物件,該物件的用途是包含可以由特定型別的所有例項共享的屬性和方法
解釋:函式裡都有prototype屬性,指向
prototype
物件,prototype
物件有constructor
屬性,預設指向原函式,繼承之後可以通過修改這些屬性的指向來實現繼承關係!
附加:建構函式是一種特殊的函式:
1,可以用普通方式去呼叫 函式名
();就不會有建立物件等等過程
2,用
new
去呼叫new操作符呼叫建構函式建立物件實際上經歷了如下幾個步驟
1) 建立乙個新物件
2) 將建構函式的作用域賦給新物件(
this
指向這個新物件)
3) 執行建構函式中的**
4) 返回新物件。
//new 之後如果是函式的執行(即
函式名();)
,優先new操作
new person('zhangsan').sayname();
//將person.sayname
看做乙個整體去使用
new,會執行
person.sayname
函式裡面的東西,同時返回乙個新物件,新物件的型別
person.sayname
new person.sayname(); //先執行方法,再
new
C語言拯救計畫Day4 1之查詢整數
本題要求從輸入的n個整數中查詢給定的x。如果找到,輸出x的位置 從0開始數 如果沒有找到,輸出 not found 輸入在第一行中給出兩個正整數n 20 和x,第二行給出n個整數。數字均不超過長整型,其間以空格分隔。在一行中輸出x的位置,或者 not found 5 7 3 5 7 1 9 2 5 ...
深入理解C 物件導向之繼承
繼承是在類之間建立一種相交的關係,使得新定義的派生類的例項可以繼承已有的基類的特徵並且還可以新增新的功能。繼承是使用已存在的類的定義作為基礎建立新類的技術,新類的定義可以增加新的資料或新的功能,也可以用已存在的類的功能。為了提高軟體模組的可復用性和可擴充性,以便提高軟體的開發效率,我們總是希望能夠利...
深入理解PHP物件賦值
1 2 深入理解php物件賦值 3echo 45 obj new stdclass 6 obj name pig 7var dump obj object stdclass 1 1 89 copy obj obj copy都是new stdclass返回的同乙個識別符號的拷貝 10var dump ...