原型中的constructor去哪了

2021-09-24 05:10:20 字數 1689 閱讀 2278

建構函式的prototype屬性指向它的prototype物件,也就是原型物件,在原型物件中有乙個constructor屬性,指向該建構函式。但是我們在使用建構函式時,一般會重寫它的原型,會導致constructor指向出問題。``````

function

person()

person.prototype.username =

"renjialei"

; person.prototype.password =

'1234567'

; person.prototype.hometown =

' shanxi'

;var person =

newperson()

;console.

log(person.prototype.constructor === person)

;//true //採用字面量方式重寫原型導致原型的constructor指向了object。

person.prototype =

console.

log(person.prototype.constructor === person)

;//false

上面這段**是將物件的原型重寫,所以他的指向發生了轉變。需要注意的是原型依舊沒有銷毀,只是他的指向發生了轉變。原型也跟著變了。

function

animal()

animal.prototype.

say=

function()

var dog =

newanimal()

; animal.prototype =

}var cat =

newanimal()

;

上面這段**的結果是:

console.

log(dog.constructor)

;//function animal()

console.

log(cat.constructor)

;//function object()

重新設定了原型所以造成了costructor指向新的物件,而底下的cat又將這個物件給接收。此時cat的原型就是我們新設定的物件。

因此有結果

dog.

say();

// gou

cat.

say();

//mao

不過需要注意的是原先設定的那個原型已經被dog接收,那個不會被覆蓋。

function

animal()

var dog =

newanimal()

; animal.prototype =

} animal.prototype.name =

"renjialei"

console.

log(dog.name)

//undefined

console.

log(dog.__proto__.constructor)

;//animal(){}

這塊需要注意的是如果在new之後給函式重新寫乙個原型物件,那麼這個原型跟我這個例項沒有半點關係!(原理就是物件儲存在堆中,指標一變,所有的東西都變了)

JS 原型constructor建構函式

一 物件原型 proto 和建構函式原型物件prototype都有乙個屬性,叫做constructor,稱之為建構函式,主要記錄該物件引用了哪個建構函式,可以讓原型物件重新指向原來的建構函式,這就是為什麼在例項物件中傳遞引數時,建構函式本身不需要寫return返回結果的原因 為了更清晰的看到是否為建...

物件導向 原型完善 constructor(掌握)

constructor的主要作用是 告訴我們當前物件是由哪個建構函式產生的。建立乙個建構函式 person function person 建立乙個例項物件 p 由建構函式例項化了乙個物件p,列印出的物件p包含了 proto 屬性,及從 proto 中可以訪問到constructor,prototy...

react中的constructor方法的理解

之前在使用react建立類,都會寫上constructor方法 constructor props 好記性不如爛筆頭,記錄一下吧!1 constructor是否有必要寫 es5的繼承,實質是先創造子類的例項物件this,然後再將父類的方法新增到this上。es6的繼承機制不同,實質是先創造父類的例項...