我很难找到全局对象“窗口”的__proto __

问题描述 投票:0回答:1

我目前正在使用Chrome。

console.log(window.__proto__.__proto__.__proto__);

console.log(window.__proto__.__proto__.__proto__ === EventTarget.prototype);

我发现上面的第一个代码返回EventTarget.prototype

这可以通过第二个代码验证,该代码返回“ true”

此外,以下代码也返回true:

console.log(EventTarget.prototype.__proto__ === Object.prototype);

但是,当您跟踪EventTarget.prototype的孩子是谁时,就会出现问题。

console.log(window.__proto__.__proto__);

上面的代码返回如下。

WindowProperties {Symbol(Symbol.toStringTag):“ WindowProperties” .....}

[当我尝试跟踪构造函数“ WindowProperties()”或对象“ WindowProperties.prototype”时,

控制台说

未捕获的ReferenceError:未定义WindowProperties 在:1:13

为什么会这样?

javascript google-chrome dom prototype global-object
1个回答
1
投票

因为没有公开给您代码的内置全局名称WindowsProperties。仅仅因为某物存在并具有名称并不意味着您的代码可以访问它。例如:

const example = (() => {
    return new class Something { };
})();
console.log(example.__proto__.constructor.name); // Something
console.log(Something); // ReferenceError: Something is not defined

注意:我在上面的代码中使用了__proto__,因此它会与您的代码紧密地映射,但是我建议从不在实际代码中使用__proto__。请改用Object.getPrototypeOf(如果不可避免,请使用Object.setPrototypeOf)。 __proto__是仅在浏览器中定义的不推荐使用的功能,并非所有对象都具有此功能(尽管几乎所有对象都具有此功能;它由Object.prototype定义)。

© www.soinside.com 2019 - 2024. All rights reserved.