建構函式的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的繼承機制不同,實質是先創造父類的例項...