Javascript 为什么`window.console.log(this)`不记录控制台对象?
我刚刚进入高级上下文实例化,使用原型链等 我很好奇Javascript 为什么`window.console.log(this)`不记录控制台对象?,javascript,oop,javascript-objects,prototypal-inheritance,Javascript,Oop,Javascript Objects,Prototypal Inheritance,我刚刚进入高级上下文实例化,使用原型链等 我很好奇window.console对象是如何创建的,这样函数log就认为它的上下文是窗口实例,而不是控制台。这与对象有关。创建新的关键字,还是绑定/self=this window.console有一个构造函数(console),我很好奇调用构造函数的最干净的方法是什么,传递窗口实例/上下文?把它作为参数传递进来??如果Console是一个独立的构造函数,我认为Window应该是一个用新上下文来构造它的构造函数,而不是说 windowInstance.
window.console
对象是如何创建的,这样函数log
就认为它的上下文是窗口实例,而不是控制台。这与对象有关。创建新的关键字,还是绑定/self=this
window.console
有一个构造函数(console),我很好奇调用构造函数的最干净的方法是什么,传递窗口实例/上下文?把它作为参数传递进来??如果Console是一个独立的构造函数,我认为Window应该是一个用新上下文来构造它的构造函数,而不是说
windowInstance.console.log = function (args) {
}.bind(windowInstance, args);
基本上,我在想象这样的布局,但不明白这个
是如何路由的
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);
记录此
的值,因为它在对控制台函数的调用之外。您不能强制console.log()
记录它认为的值在它自己的参考框架中;API中没有这方面的规定(因为坦率地说,它不是很有用)。如果要记录window.console
对象的状态,您可以:
console.log(window.console);
如果你有:
var obj = { hello: "world" };
console.log(obj);
控制台显示了该对象,您会感到惊讶吗?那么同样的道理,
console.log(this);
记录此
的值,因为它在对控制台函数的调用之外。您不能强制console.log()
记录它认为的值在它自己的参考框架中;API中没有这方面的规定(因为坦率地说,它不是很有用)。如果要记录window.console
对象的状态,您可以:
console.log(window.console);
您的代码没有记录任何内容:不清楚“但是日志认为它是窗口”是基于什么的。这是一切的方式,而不仅仅是console.log
。我可能错了,但据我所知,这个
的范围在执行过程中很重要;如果它是从一个函数中执行的,那么它的父函数应该是this
,但是,您正在窗口的范围内执行它。您正在将this
传递到函数中。这将记录this
的值,因为它位于控制台.log()的外部,而不是this
的内部。@Pointy我试图这么说,但不幸的是我的措辞没有你的有效:/@Daedalus ha,不,我在输入我的评论后看到了你的评论,我同意你说的是同一件事。你的代码没有记录任何东西:不清楚“但是日志认为它是窗口”是基于什么。这是所有事情的方式,而不仅仅是console.log
。我可能错了,但据我所知,这个
的范围在执行过程中很重要;如果它是从一个函数中执行的,那么它的父函数应该是this
,但是,您正在窗口的范围内执行它。您正在将this
传递到函数中。这将记录这个
的值,因为它在控制台.log()的外部,而不是这个
的内部。@Pointy我试图这么说,但不幸的是我的措辞没有你的那么有效:/@Daedalus-ha,不,我在键入我的后看到了你的评论,我同意你在说同样的话。