我們先定義一個(gè)空函數(shù),形參是original,就像下面這樣:
function createAnother(original){}
在該函數(shù)中創(chuàng)建一個(gè)新對(duì)象clone:
function createAnother(original){ var clone=Object.create(original); }
給clone對(duì)象增加屬性sayHi,sayHi屬性是一個(gè)函數(shù):
function createAnother(original){ var clone=Object.create(original); clone.sayHi=function(){ alert('hi'); }; }
最后,返回clone對(duì)象:
function createAnother(original){ var clone=Object.create(original); clone.sayHi=function(){ alert('hi'); }; return clone; }
假設(shè)我們有這樣一個(gè)對(duì)象:
var person={ name:'Nicholas', friends:['Shelby','Court','Van'] };
將以上對(duì)象作為實(shí)參傳入我們的函數(shù)運(yùn)行:
var anotherPerson=createAnother(person); anotherPerson.sayHi();
運(yùn)行結(jié)果是:將彈出’Hi’的窗口。
我們看到,函數(shù)createAnother有這樣一句:
var clone=Object.create(original);
這不就是原型式繼承嗎?
的確,這里確實(shí)在內(nèi)部使用了原型式繼承的方法,最后返回的就是clone對(duì)象。不過(guò)還是與原型式繼承有點(diǎn)區(qū)別:
原型式繼承繼承了原對(duì)象的屬性,新對(duì)象并沒(méi)有新的額外屬性;寄生式繼承在內(nèi)部就可以給新對(duì)象增加屬性,新對(duì)象除了擁有原對(duì)象的屬性,還擁有內(nèi)部增加的屬性。
以上例來(lái)說(shuō),相比于原型式繼承,多出的關(guān)鍵語(yǔ)句:
clone.sayHi=function(){ alert('hi'); };
創(chuàng)建一個(gè)實(shí)例后,該實(shí)例就擁有該屬性。
聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com