var f2 = undefined
var f1 = function () {
f2 = this
console.log('here')
}
f1()
f2()
输出
f2()
^
TypeError: undefined is not a function
如何从f1()的内部设置f2到f1?
答案 0 :(得分:2)
这实际上并不是设置它的正确方法,但即使是这样,您也从未调用f1
,因此f2
的值永远不会改变。你需要这个:
var f2 = undefined;
var f1 = function () {
f2 = this;
console.log('here');
}
f1();
f2();
也就是说,上面的代码仍然不起作用,因为独立函数内的this
不是函数。在浏览器中,它将是window
对象,您将获得类似TypeError: object is not a function
的内容。在其他上下文中(例如,node.js),它将取决于它们如何实现顶级对象(如果有的话)。
有great question解释函数如何与this
关键字一起使用。在这种情况下,如果不按名称引用外部函数或更改调用f1
的方式,您将无法执行此操作:
// Referring to f1 by name..
var f2 = undefined;
var f1 = function () {
f2 = f1;
console.log('here');
}
f1();
f2();
// .. or using the apply method to change the value of "this", though still
// referring to f1 by name in some sense (at the call site)
var f2 = undefined;
var f1 = function () {
f2 = this;
console.log('here');
}
f1.apply(f1);
f2();
旁注,分号省略是粗略的。
答案 1 :(得分:1)
如果没有包装,我不确定是否有任何办法。
var wrapper = {}
wrapper.f1 = function () {
wrapper.f2 = wrapper.f1
console.log('invoked', this)
}
wrapper.f1()
wrapper.f2()
我不确定这是否适用于您的实际使用案例。
var whatIsThis = function() {
console.log('invoked', this)
}
whatIsThis()
在相关说明中,第二个示例显示了浏览器中的窗口对象。我不知道它会在节点中显示什么。