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

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

JavaScript中全局對象是不是繼承自Object呢?

JavaScript中全局對象是不是繼承自Object呢?

眼眸繁星 2018-10-10 17:19:42
我想知道全局對象是不是繼承自Object呢?如果是,那應該有this.__proto__===Object.prototype//但是實際結果為false而this也確實有__proto__這個屬性,如果它不指向Object.prototype那么應該指向哪里呢?另外一個讓我困得問題是如下代碼:Object.prototype.s=15; (function(){     console.log(s); }());以上代碼正常輸出15,但是為什么呢?函數不是應該沿著作用域鏈上尋s嗎?這個匿名函數本身沒有s,所以他應該去全局中找,但是我是給Object的原型添加了s的屬性并沒有給全局對象加s屬性,它是怎么找到的?另外,如果又有:var s=20;Object.prototype.s=15; (function(){     console.log(s); }());則輸出20而不是15???我對此的理解是因為全局對象是一個對象,所以它的__proto__指向Object.prototype所以當全局對象沒有s時沿著原型鏈上尋找到Object.prototype.s,若全局對象有s,則它覆蓋了Object.prototype.s。但是這又和開頭問題沖突了。。。啊啊啊啊啊頭都大了到底怎么解釋呢?求大神解答,感激不盡!
查看完整描述

1 回答

?
三國紛爭

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

既然叫原型“鏈”,那肯定可能不止一級別了,而是一層一層地往下找,直到null為止。

window.__proto__.__proto__.__proto__.__proto__ === Object.prototype

window.__proto__.__proto__.__proto__.__proto__.__proto__ === null

https://img1.sycdn.imooc.com//5bfb9fa00001dc4805420631.jpg

var s=20;Object.prototype.s=15;
(function(){
    console.log(s);
}());

相當于

window.s=20;Object.prototype.s=15;
(function(){    console.log(s);
}());

獲取屬性時,是一層一層往下找,直到找到為止的。s屬性在第一層就找到了,沒必要再繼續往下找了。

所以,window.s === 20,而window.__proto__.__proto__.__proto__.__proto__.s === 15。


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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