Javascript原型鏈和原型的一個誤區(qū)
之前我對Javascript的原型鏈中, 原型繼承與標識符查找有些迷惑,
如, 如下的代碼:
function Foo() {};
var foo = new Foo();
Foo.prototype.label = "laruence";
alert(foo.label); //output: laruence
alert(Foo.label);//output: undefined
今天看到了如下這個圖:
Javascript object layout
另外, 在Javascript Object Hierarchy看到:
The prototype is only used for properties inherited by objects/instances created by that function. The function itself does not use the associated prototype.
也就是說, 函數(shù)對象的prototype并不作用于原型鏈查找過程中,
今天在firefox下發(fā)現(xiàn)(因為firefox通過__proto__暴露了[[prototype]]), 真正參與標識符查找的是函數(shù)對象的__proto__,
function Foo() {};
var foo = new Foo();
Foo.__proto__.label = "laruence";
alert(Foo.label); //output: laruence
alert(foo.label);//output: undefined
而, 顯然的:
function Foo() {};
alert(Foo.__proto__ === Foo.prototype); //output: false
另外, 也解釋了,
alert(Object.forEach); // undefined
Function.prototype.forEach = function(object, block, context) {
for (var key in object) {
if (typeof this.prototype[key] == "undefined") {
block.call(context, object[key], key, object);
}
}
};
alert(Object.forEach);
alert(Function.forEach);
alert(Object.forEach === Function.forEach); // true
相關文章
JS使用eval()動態(tài)創(chuàng)建變量的方法
這篇文章主要介紹了JS使用eval()動態(tài)創(chuàng)建變量的方法,詳細分析了eval函數(shù)的功能及使用eval函數(shù)實現(xiàn)動態(tài)創(chuàng)建變量的步驟與相關注意事項,需要的朋友可以參考下2016-06-06javascript中打印當前的時間實現(xiàn)思路及代碼
打印當前的時間的方法有很多,在本文為大家詳細介紹下使用javascript是如何做到的,具體實現(xiàn)如下,感興趣的朋友可以參考下2013-12-12JS移動端/H5同時選擇多張圖片上傳并使用canvas壓縮圖片
這篇文章主要介紹了JS移動端/H5同時選擇多張圖片上傳并使用canvas壓縮圖片,需要的朋友可以參考下2017-06-06Element-UI的?InfiniteScroll?無限滾動組件基本使用及應用場景
這篇文章主要介紹了Element-UI的InfiniteScroll無限滾動組件基本使用,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-06-06JavaScript?數(shù)據(jù)結構之集合創(chuàng)建(2)
這篇文章主要介紹了JavaScript?數(shù)據(jù)結構之集合創(chuàng)建,上一篇我們介紹了什么是集合,并且手動實現(xiàn)了一個集合的類,本篇基于上篇內(nèi)容繼續(xù)深入介紹需要的小伙伴可以參考一下2022-04-04