javascript原型繼承constructor需要注意的地方

antzone發表於2017-04-02

關於prototype原型和constructor基本用法這裡就不多介紹了,相關內容可以參閱相關閱讀。

(1).prototype可以參閱javascript prototype原型一章節。

(2).constructor可以參閱javascript constructor一章節。

先來看一段程式碼例項:

[JavaScript] 純文字檢視 複製程式碼
function A(){
}
function B(){
}
A.prototype=new B();
var a=new A();
console.log(a.constructor==A);
console.log(a.constructor==B);

按照通常的習慣理解,由於a的建構函式是B(),按說第一個程式碼應該輸出true才對,但是實際情況卻是第二個程式碼輸出true。

實際上建構函式本身並沒有constructor屬性,而是繼承於prototype原型物件,原型物件的constructor是被規定為執行建構函式。

A.prototype=new B(),此程式碼執行以後,A的原型物件被B的物件例項所覆蓋,自然constructor就會指向B了。

所以只要人為的修正一下即可,程式碼如下:

[JavaScript] 純文字檢視 複製程式碼
function A(){
}
function B(){
}
A.prototype=new B();
A.prototype.constructor=A;
var a=new A();
console.log(a.constructor==A);
console.log(a.constructor==B);

相關文章