基本思想:通過改變prototype的指向形成例項和原型之間的原型鏈
instancesub->subtype.prototype(instancesuper)->supertype.prototype-> object.prototype->null
子物件的原型是父物件的例項subtype.prototype = instancesuper;
或subtype.prototype=new supertype();
父物件的例項上新增 constructor 屬性 指向 subtypesubtype.prototype.constructor = subtype;
改變prototype
動態修改prototype的屬性時,會影響所有已經建立和新建立的例項。
重寫prototype,即將prototype賦值為新的物件(物件字面量形式)時,不會影響已經建立的例項,會影響後序建立的例項
function
supertype()
supertype.prototype.
getsupervalue
=function()
function
subtype()
var instancesuper =
newsupertype()
; subtype.prototype = instancesuper;
//子物件的原型是父物件的例項
//supertype的例項作為 subtype的原型
subtype.prototype.constructor = subtype;
//新增 constructor 屬性 指向 subtype
//子物件的原型設定為父物件的例項後,再向子物件原型新增方法
subtype.prototype.
getsubvalue
=function()
var instancesub =
newsubtype()
;//子物件能夠繼承到父物件的方法
console.
log(instancesub.
getsupervalue()
);//true
console.
log(instancesub.
getsubvalue()
);//false
原型鏈的問題1. 原型鏈上的屬性都是共享的,包含引用型別值(eg:陣列型別)的原型屬性會被所有例項共享,一改全改
2. 建立子型別的例項時 ,不能向父型別的建構函式中傳遞引數
3. 解決:使用建構函式解決原型鏈繼承的問題
基本思想:在子物件的建構函式內部呼叫父類的建構函式function
subtype
(type, price)
建構函式實現繼承的問題
例項繼承自建構函式,而建構函式原型上的屬性和方法對例項物件不可見.
建構函式模式的問題:方法都在建構函式中定義,無法復用
基本思想:使用原型鏈實現對原型屬性和方法的繼承,建構函式實現對例項屬性的繼承
原型+建構函式組合繼承的問題: 呼叫兩次超類建構函式。1.建立子類原型 2. 在子類構造內部呼叫父類構造
function
supertype
(name)
supertype.prototype.
sayname
=function()
function
subtype
(name,age)
//繼承建構函式原型上的屬性和方法
subtype.prototype=
newsupertype()
;//呼叫父類建構函式
subtype.prototype.constructor=subtype;
subtype.prototype.
sayage
=function()
var sub =
newsubtype
('lily',18
);sub.color.
push
('black'
);
console.
log(sub.color)
;//["red", "green", "blue", "black"]
var sub2 =
newsubtype
('nacy',12
);console.
log(sub2.color)
;//["red", "green", "blue"]
基本思想:建立乙個生成臨時建構函式的函式,借助原型,基於已有的物件建立新物件function
object
(o);
//建立臨時建構函式
f.prototype=o;
//將臨時建構函式的原型設定為超類的物件.
return
newf()
;//返回臨時建構函式的新例項
}var person2=
object
(person)
;//則 person2 的原型為person
原型式繼承的問題基本思想:原型式繼承+工廠模式(建立乙個僅用於封裝繼承過程的函式,該函式在內部為物件新增屬性和方法,然後返回物件)
寄生式繼承的問題:不能做到函式復用
function
object
(o);
f.prototype=o;
//將臨時建構函式的原型設定為超類的物件.
return
newf()
;}function
createanother
(original)
return clone;
}var person=
var person2=
createanother
(person)
; person2.
sayhi()
;
基本思想: 寄生式繼承+組合繼承function
object
(o);
f.prototype=o;
//將臨時建構函式的原型設定為超類的物件.
return
newf()
;}//建立超類建構函式的副本,賦值給子型別的原型
function
inheritprototype
(subtype,supertype)
三分鐘搞定python基礎
庫的匯入和新增 在機器學習和人工智慧為主導的工業4.0時代,python猶如一股龍捲風襲捲著一切。python作為一門解釋性的物件導向的語言雖然在運算速度上有不足,但是相比於程式運算速度,程式專案開發速度更為重要,而且在在這個裝備氪金時代,運算速度的缺憾完全可以拿硬體來補,何況python還支援並行...
沉默三分鐘
網上見此真情之文,藉以自表 原文 http www.hecaitou.net p 3018 沉默三分鐘是心祭。那麼多年了,國旗終於為平民而降。那麼多天了,全民哀悼終於實現。與此同時,火炬停止傳遞,因為這不是乙個歡慶的時刻。很多年後回顧2008年,我 也許寧可它從日曆中消失。還沒有哪一年和今年一樣,才...
三分鐘搞定pandas時間資料
import pandas as pd 載入資料 detail pd.read excel meal order detail.xlsx 獲取 place order time place order time detail.loc place order time 先轉化一下 轉化為pandas預...