課程
/前端開(kāi)發(fā)
/JavaScript
/JavaScript深入淺出
new一個(gè)對(duì)象和object.create(xx.prototype)有什么區(qū)別?student里為什么要用person.call?
2017-10-31
源自:JavaScript深入淺出 8-2
正在回答
老師用的是組合繼承,Person是父類,Student是子類,在student里用person.call(this,參數(shù)),是構(gòu)造函數(shù)式繼承的精髓,由于call方法可以更改函數(shù)的作用環(huán)境,相當(dāng)于此時(shí)student繼承了person的所有屬性。student.prototype=object.creat(person.prototype);
student.prototype.constructor=student;
我認(rèn)為這兩句話是類氏繼承,作用等于student.prototype=new person();就是說(shuō)實(shí)例化父類創(chuàng)建一個(gè)新的對(duì)象,這個(gè)對(duì)象的__proro__指向父類.prototype,這樣就擁有父類的所有屬性,然后把這個(gè)對(duì)象賦值給student的原型對(duì)象,這樣student就繼承了person的所有屬性。
不過(guò)這樣寫的缺點(diǎn)在于,構(gòu)造函數(shù)繼承時(shí)執(zhí)行了一遍父類的構(gòu)造函數(shù),實(shí)現(xiàn)子類原型繼承的類氏繼承時(shí)又調(diào)用了一遍父類構(gòu)造函數(shù)。
我的理解是,new一個(gè)對(duì)象和create新建一個(gè)對(duì)象是一樣的。
new的用法是ES3的用法,object.create是ES5的用法。而且new的問(wèn)題在于遇到需要傳參數(shù)的話,不傳有可能會(huì)報(bào)錯(cuò)(暫時(shí)還沒(méi)證明)??不過(guò)老師說(shuō)的是會(huì)顯得很奇怪。
student用的是東西是person都有的所以直接用call引用person就好了省了自己重復(fù)寫同樣的東西了,用apply也可以。(我自己是上述這么理解的,既然student能用person實(shí)現(xiàn)一部分功能,為什么還要再寫一遍吶)
舉報(bào)
由淺入深學(xué)習(xí)JS語(yǔ)言特性,且解析JS常見(jiàn)誤區(qū),從入門到掌握
4 回答oop的PPT有嗎?
2 回答OOP的PPT
2 回答這里有個(gè)疑惑,大家討論下?
3 回答JS中OOP的應(yīng)用場(chǎng)景?
1 回答對(duì)這個(gè)題目仍然存在疑惑,求助!
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號(hào)-11 京公網(wǎng)安備11010802030151號(hào)
購(gòu)課補(bǔ)貼聯(lián)系客服咨詢優(yōu)惠詳情
慕課網(wǎng)APP您的移動(dòng)學(xué)習(xí)伙伴
掃描二維碼關(guān)注慕課網(wǎng)微信公眾號(hào)
2018-01-22
老師用的是組合繼承,Person是父類,Student是子類,在student里用person.call(this,參數(shù)),是構(gòu)造函數(shù)式繼承的精髓,由于call方法可以更改函數(shù)的作用環(huán)境,相當(dāng)于此時(shí)student繼承了person的所有屬性。student.prototype=object.creat(person.prototype);
student.prototype.constructor=student;
我認(rèn)為這兩句話是類氏繼承,作用等于student.prototype=new person();就是說(shuō)實(shí)例化父類創(chuàng)建一個(gè)新的對(duì)象,這個(gè)對(duì)象的__proro__指向父類.prototype,這樣就擁有父類的所有屬性,然后把這個(gè)對(duì)象賦值給student的原型對(duì)象,這樣student就繼承了person的所有屬性。
不過(guò)這樣寫的缺點(diǎn)在于,構(gòu)造函數(shù)繼承時(shí)執(zhí)行了一遍父類的構(gòu)造函數(shù),實(shí)現(xiàn)子類原型繼承的類氏繼承時(shí)又調(diào)用了一遍父類構(gòu)造函數(shù)。
2017-11-01
我的理解是,new一個(gè)對(duì)象和create新建一個(gè)對(duì)象是一樣的。
new的用法是ES3的用法,object.create是ES5的用法。而且new的問(wèn)題在于遇到需要傳參數(shù)的話,不傳有可能會(huì)報(bào)錯(cuò)(暫時(shí)還沒(méi)證明)??不過(guò)老師說(shuō)的是會(huì)顯得很奇怪。
student用的是東西是person都有的所以直接用call引用person就好了省了自己重復(fù)寫同樣的東西了,用apply也可以。(我自己是上述這么理解的,既然student能用person實(shí)現(xiàn)一部分功能,為什么還要再寫一遍吶)