6種繼承的優點和缺點

2021-09-25 21:27:30 字數 3833 閱讀 7470

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...