为什么' window.console.log(this) '不记录控制台对象

Why does `window.console.log(this)` not log the console object?

本文关键字:记录 对象 控制台 log window console 为什么 this      更新时间:2023-09-26

我正在进入高级上下文实例化,使用原型链等。

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

window.console有一个构造函数(控制台),我很好奇调用构造函数的最干净的方式,传递窗口实例/上下文将是什么?把它作为参数传入??如果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);