gpt4 book ai didi

javascript - 为什么 `window.console.log(this)` 不记录控制台对象?

转载 作者:行者123 更新时间:2023-11-28 15:18:10 25 4
gpt4 key购买 nike

我刚刚开始使用原型(prototype)链等进行高级上下文实例化。

我很好奇 window.console 对象是如何创建的,以便函数 log 认为它的上下文是窗口实例,而不是控制台。这与 Object.createnew 关键字或绑定(bind)/self = this 有关吗?

window.console 有一个构造函数(Console),我很好奇调用构造函数、传递 Window 实例/上下文的最干净的方法是什么?将其作为参数传递?如果 Console 是一个单独的构造函数,我认为 Window 将是使用新上下文构造它的构造函数,而不是说

windowInstance.console.log = function (args) {

}.bind(windowInstance, args);

差不多,我正在想象这样的布局,但不明白this如何路由

var window = new Window();
window.console.log(this); // logs window

function Window () {
// this === window when constructed above
this.console = new Console();
}

function Console () {
this.log = function () {} // where this === window.console but log thinks it's window
}

谢谢

最佳答案

如果你有:

var obj = { hello: "world" };
console.log(obj);

控制台显示该对象会让您感到惊讶吗?出于同样的原因,

console.log(this);

记录 this 的值,因为它位于对控制台函数的调用之外。您不能强制 console.log() 记录它认为 this 的值在其自己的引用框架中的内容; API 中没有对此进行规定(因为坦率地说,它不是很有用)。如果您想记录 window.console 对象的状态,您可以:

console.log(window.console);

关于javascript - 为什么 `window.console.log(this)` 不记录控制台对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32705715/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com