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