JS繼承類相關試題

2022-01-19 03:00:49 字數 997 閱讀 3583

題目一:

my answer:

1.這三種寫法,寫法一是錯誤的,寫法二三是正確的。

對於寫法一,只是把person的原型物件賦值給了student的原型物件,這樣子雖然student的例項中可以訪問到person的原型上的屬性和方法,但是對於不是繫結在原型上的屬性,例如person中的this.name,例項中是不會有這個屬性的。所以這並不是繼承。只是簡單的引用,因為person.prototype是乙個物件,也是引用型別,這樣的賦值只是把person.prototype的引用賦值給了student.prototype。既然是引用,那兩者如果有一方發生改動,另一方必然會受影響。這樣new出來的例項之間也是互相影響的。

對於寫法二,確實是正確的寫法,這種寫法就是組合繼承,但是不是完美的寫法。因為建立例項的過程中兩次呼叫了父類的建構函式。

對於寫法三,也是正確的寫法,這種寫法就是寄生式繼承。但是不是完美的寫法。首先,es3中沒有object.create()方法,沒有做相容。然後,這種繼承如果父類中含有引用型別,如陣列,那麼繼承之後,各個例項中的這個引用型別會互相影響。

相對更完美的寫法:

function inheritprototype(subtype,supertype)else;

w.prototype=supertype.prototype;

prototype=new w();

}prototype.constructor=subtype;

student.prototype=prototype;

}inheritprototype(student,person);

題目二,感覺給出了寫法就是可以用來回答題目二的了。不過,還要優化的話,我想應該是這裡

person.prototype = 

}

這裡重新定義了原型物件,覆蓋了原來的constructor屬性,可以把它定義回去。就是這樣

person.prototype = 

}

js實現類繼承

為了讓自己能把繼承的實現機制理解得更透徹,還是決定看能不能通過自己的理解講述出來,以下文章如有不妥之處請積極批評指正,感激不盡。我們知道js中一切皆物件,但是當我們把流行的物件導向的語言特性套到js身上時卻略顯尷尬,為啥?js沒有提供繼承機制,這個得我們自己動手來模擬實現。不管是傳統的方法還是所謂的...

js類的繼承

如何實現類的繼承呢?有如下2個建構函式 function peopleclass peopleclass.ptototype function studentclass name,function peopleclass peopleclass.ptototype function studentc...

JS類的繼承

目錄 js類 寫類 繼承get set static 方法static修飾 屬性static修飾 特殊 var v parent new parent console.log v parent 就以上面的parent類為父類,寫乙個studnet繼承他 class student extends p...