第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Javascript原型繼承和“instanceof”

Javascript原型繼承和“instanceof”

千萬里不及你 2023-07-20 16:25:50
我只是無法理解,為什么在對象繼承中“instanceof”無法將“子”對象評估為父原型的實例。例如:function Parent(property) {    this.property = property;}function Child(property) {    Parent.call(property);}const child = new Child("");console.log(child instanceof Child); // of course, trueconsole.log(child instanceof Parent); // false. But why???至于類的繼承(或者說JS中被認為是類的東西),情況就不同了:class Parent {    constructor(property) {        this.property = property;    }}class Child extends Parent {    constructor(property) {        super(property);    }}const child = new Child("");console.log(child instanceof Child); // trueconsole.log(child instanceof Parent); // also true!!!造成這種差異的原因是什么?是否可以創(chuàng)建子對象,以便將它們正確地識別為其父原型的實例(無需求助于類)?
查看完整描述

1 回答

?
繁星coding

TA貢獻1797條經(jīng)驗 獲得超4個贊

你的第一個例子很簡單,與 Javascript 中“原型繼承”的工作方式相差甚遠。

一方面,Parent.call(property)這肯定不是你的意思。此調(diào)用Parent將其this設(shè)置為property,并且沒有傳遞任何參數(shù),這絕對不是您想要的。我懷疑你的意思是Parent.call(this, property)- 它調(diào)用Parentthis傳遞給相同的內(nèi)容Child,并傳遞property參數(shù)。但這與“繼承”無關(guān)。

instanceof運算符只是檢查對象的“原型鏈”,以查看相關(guān)對象(prototype您正在測試的“類”的屬性)是否出現(xiàn)在任何位置。操縱對象影響instanceof操作者的唯一方法是改變原型鏈。

有很多方法可以做到這一點,但“偽造”JS(ES6 之前)中基于類的繼承之類的標準方法是這樣的:

function Parent(property) {

? ? this.property = property;

}


function Child(property) {

}


Child.prototype = Object.create(Parent.prototype);


const child = new Child("");


console.log(child instanceof Child);

console.log(child instanceof Parent);

它手動使從Child委托構(gòu)造的所有對象到Object.create(Parent.prototype),它本身就是一個從 繼承的對象(否則完全是空的并且沒有特殊屬性)Parent.prototype。因此,現(xiàn)在當(dāng)instanceof檢查原型鏈時,它會找到它正在尋找的內(nèi)容,因此返回true,正如您從上面的代碼片段中看到的那樣。

當(dāng)然,如果你確實想要在 JS 中基于類的繼承(我個人不推薦,但肯定很流行),ES6 語法class提供了更好的語法糖,因此你不必手動弄亂原型鏈如上。但請注意,這本質(zhì)上就是 ES6 類“幕后”發(fā)生的事情。

查看完整回答
反對 回復(fù) 2023-07-20
  • 1 回答
  • 0 關(guān)注
  • 165 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號