【发布时间】:2011-06-13 14:46:47
【问题描述】:
如果我有这样的功能:
function foo(_this) {
console.log(_this);
}
function bar() {}
bar.prototype.func = function() {
foo(this);
}
var test = new bar();
test.func();
然后记录bar 的test 实例。
但是,要使其正常工作,我必须在 bar.prototype.func 函数中传递 this。我想知道是否有可能在不传递this 的情况下获得相同的this 值。
我尝试使用 arguments.callee.caller,但这会返回原型函数本身,而不是原型函数内的 this 值。
是否可以通过仅在原型函数中调用foo() 来记录bar 的test 实例?
【问题讨论】:
-
不,您不能访问调用堆栈上的函数上下文。你必须传递这个上下文。
-
如果您已经要创建一个特殊用途的函数来记录附加到 bar 的原型,您是否有不想传递
this的原因?除了学习目的之外,还有其他原因使用此模式吗? -
@TNi:不一定有实际用途,但在我的场景中会很有用。我试图通过将一个函数和边界传递给一个函数来创建一个多级 for 循环,该函数像使用 for 循环一样执行该函数。在常规的 for 循环中,可以访问
this,但这样看来我需要将this传递给我的函数。 -
我认为您的原始方法是正确的。最佳做法是将对象的实例传递给全局函数。
-
是的,它可能有实际用途。有时你不会选择 JS 如何调用函数(回调、内部等)。
标签: javascript function scope this