parent.prototype.grand =
'grand'
;function
parent
(name)
function
child()
child.prototype =
newparent()
;var child1 =
newchild
('child1');
var child2 =
newchild
('child2'
);
缺點
1.引用值共享問題
引用值會被所有的例項(這裡以兩個為例,下面也將都是)共享,乙個物件修改了原型屬性,那麼另乙個的原型屬性也會被修改
2.不能傳參
在建立child的例項時,不能向parent傳遞引數;如果傳遞也不會有作用
);1.解決了引用值共享的問題
2.可以通過child向parent傳參
1.多執行了一次函式call
2.parent上的原型不能被繼承
注:為了證明parent的原型上有grand這個屬性值,我在控制台新建了乙個parent物件
將原型鏈繼承和借用建構函式階乘結合在一起
parent.prototype.grand =
'grand'
;function
parent
(name)
function
child
(name, age)
child.prototype =
newparent()
;child.prototype.constructor = child;
var child1 =
newchild
('child1',18
);var child2 =
newchild
('child2',19
);
1.parent上的原型可以被繼承
2.解決了引用值共享的問題
3.可以通過child向parent傳參
函式多執行了一次call
var car =
function
object
(o);
f.prototype = o;
return
newf()
;}var car1 =
object
(car)
;var car2 =
object
(car)
;
重點:用乙個函式包裝乙個物件,然後返回這個函式的呼叫,這個函式就變成了個可以隨意增添屬性的例項或物件。object.create()就是這個原理。
特點:類似於複製乙個物件,用函式來包裝。
缺點:1、所有例項都會繼承原型上的屬性。
2、無法實現復用。(新例項屬性都是後面新增的)
function
createobject
(o)return clone;
}var car =
var car1 =
createobject
(car)
;
重點:就是給原型式繼承外面套了個殼子。
優點:沒有建立自定義型別,因為只是套了個殼子返回物件(這個),這個函式順理成章就成了建立的新物件。
缺點:沒用到原型,無法復用。
function
parent
(name)
parent.prototype.
getname
=function()
function
child
(name, age)
child.prototype =
newparent()
;var child1 =
newchild
('kevin'
,'18');
console.
log(child1)
組合繼承最大的缺點是會呼叫兩次父建構函式。
一次是設定子型別例項的原型的時候:
child.prototype = new parent();
一次在建立子型別例項的時候:
var child1 = new child(『kevin』, 『18』);
回想下 new 的模擬實現,其實在這句中,我們會執行:
parent.call(this, name);
在這裡,我們又會呼叫了一次 parent 建構函式。
所以,在這個例子中,如果我們列印 child1 物件,我們會發現 child.prototype 和 child1 都有乙個屬性為colors,屬性值為[『red』, 『blue』, 『green』]。
那麼我們該如何精益求精,避免這一次重複呼叫呢?
如果我們不使用 child.prototype = new parent() ,而是間接的讓 child.prototype 訪問到 parent.prototype 呢?
看看如何實現:
function
parent
(name)
parent.prototype.
getname
=function()
function
child
(name, age)
// 關鍵的三步
varf
=function()
;f.prototype = parent.prototype;
child.prototype =
newf()
;var child1 =
newchild
('kevin'
,'18');
console.
log(child1)
;最後我們封裝一下這個繼承方法:
function
object
(o)f
.prototype = o;
return
newf()
;}function
prototype
(child, parent)
// 當我們使用的時候:
prototype
(child, parent)
;
ps:建議去看下紅寶石 Activemq優點和缺點
activemq有自己的特點和優勢 1 activemq可以很好的執行在任何jvm上,而不只是整合到jboss的應用伺服器中 2 activemq支援大量的跨語言客戶端 3 activemq支援許多不同的協議,如ajax,rest,stomp,openwire,xmpp 4 activemq支援許多...
python優點和缺點
優點 語法簡潔優美,功能強大,標準庫跟第三方庫灰常強大,應用領域非常廣 vinta awesome python github 跟php形成宣明對比 語言方面,舉幾個例子 一切都是物件 類 class本身 函式 類方法是callable的物件因為是物件,所以你當然可以傳來傳去啦.歡迎 四 99 7 ...
sqlalchemy(ORM)優點和缺點
在學校先學的django後學的資料庫,當時就感覺django的orm非常好用。後來接觸了pymysql和mysqldb,開發效率低 用得也少,因此對這兩個不熟悉。昨天發現了sqlalchemy,現在就來說一下。優點 1.簡單 orm以最基本的形式建模資料。表的字段就是這個類的成員變數 2.可讀性 o...