javascript - 為什么newtoy.constructor === Gadget在控制臺(tái)的結(jié)果是false?
問(wèn)題描述
function Gadget(name,color){ this.name=name; this.color=color; this.whatAreYou=function(){return ’I am a ’ + this.color + ’ ’ + this.name; };}Gadget.prototype={ price:100, rating:3, getInfo:function(){return ’Rating: ’ + this.rating + ’, price: ’ + this.price; }};var newtoy=new Gadget(’webcam’,’black’);new.rating;//3newtoy.constructor === Gadget;//true
上述例子摘自《面向?qū)ο缶幊讨改稀芬粫?shū)
問(wèn)題解答
回答1:如果代碼沒(méi)寫(xiě)錯(cuò)的話(huà),那么就是false,因?yàn)槟阋呀?jīng)把Gadget的原型對(duì)象給重寫(xiě)了,而你重寫(xiě)的原型對(duì)象中沒(méi)有constructor屬性,可以參考一下《JavaScript高級(jí)程序設(shè)計(jì)》中第六章關(guān)于原型的介紹
回答2:樓上正解,Gadget.prototype 被重寫(xiě)了。因?yàn)樵蛯?duì)象中有個(gè)隱式的constructor,指向了構(gòu)造函數(shù)本身。如下:
原型拓展,最好寫(xiě)成這種形式:
Test.prototype.newFn = function() { ...}
或者使用Object.assign()合并對(duì)象:
Test.prototype = Object.assign(Test.prototype, { newAttr: ’’, newFn: function() {... }})
相關(guān)文章:
1. css3 - 純css實(shí)現(xiàn)點(diǎn)擊特效2. css - 新手做響應(yīng)式布局, 斷點(diǎn)過(guò)后右側(cè)出現(xiàn)空白,求幫助,謝謝。3. mysql - 記得以前在哪里看過(guò)一個(gè)估算時(shí)間的網(wǎng)站4. javascript - 關(guān)于<a>元素與<input>元素的JS事件運(yùn)行問(wèn)題5. MySQL中的enum類(lèi)型有什么優(yōu)點(diǎn)?6. 大家好,我想請(qǐng)問(wèn)一下怎么做搜索欄能夠搜索到自己網(wǎng)站的內(nèi)容。7. javascript - ES6 中能否把 class 屬性 方法 分文件?8. python - 能通過(guò)CAN控制一部普通的家用轎車(chē)嗎?9. css - 關(guān)于border-image10. mysql - 查詢(xún)字段做了索引為什么不起效,還有查詢(xún)一個(gè)月的時(shí)候數(shù)據(jù)都是全部出來(lái)的,如果分拆3次的話(huà)就沒(méi)問(wèn)題,為什么呢。
