亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

javascript中,constructor.prototype.constructor 為什么會

javascript中,constructor.prototype.constructor 為什么會

慕田峪9158850 2018-12-13 14:14:07
1、一個通過new創造的instance,他的constructor.prototype.constructor為什不是Object()2、實例代碼如下:function Dog(name){    this.name = name;}var dog1 = new Dog('dg1')dog1.constructor.prototype.constructor // Dog()疑問:如上代碼,我的理解是constructor.prototype 是一個普通的對象,所以這個普通的對象的constructor應該是Object(),而不是Dog()4、再看如下代碼:function Dog(name){    this.name = name;}Dog.prototype = {    color:'black',    age:3}var dog2 = new Dog('dg2')dog2.constructor.prototype.constructor // Object()疑問:這里返回的是符合預期的Object(),難道一個構造函數默認的prototype不是一個普通的空對象么?或者說跟我們手動賦值的自定義對象有差別?這里的疑問一直沒搞明白,希望各路神仙指點~~
查看完整描述

1 回答

?
胡說叔叔

TA貢獻1804條經驗 獲得超8個贊

em...感覺你原型對象弄混了...

構造函數的實例本身是沒有constructor的,它的constructor繼承自原型,原型的constructor指向構造函數,所以dog1.constructor === Dog。這里不能跳過dog1先看后邊的。

看懂的話繼續..
原題變為Dog.prototype.constructor
Dog.prototype指向的是Dog構造函數的原型對象
所以最后的問題變為:原型對象的constructor,那不就是構造函數么,也就是Dog,沒毛病啊..

看懂的話再繼續..
至于第二個例子,你的原型對象指向一個另一個對象了,constructor自然不指向原來的構造函數了,而是指向Object構造函數。

可以看一下我寫的文章,里邊有原型對象的關系圖,一看你就知道問題出在哪了。JS基礎—原型對象的那些事(二)


查看完整回答
反對 回復 2019-01-26
  • 1 回答
  • 0 關注
  • 387 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號