function Foo(x) {
this.bar = function() { return x; /* but not always */ }
}
Foo.prototype.baz = function() {
return this.bar(); // Case 2 - should return x
};
var f = new Foo(3);
f.bar(); // Case 1 - should return undefined
f.baz(); // should return x which is 3 in this case
所以,bar
是f
实例方法这是Foo
一个实例。
另一方面,baz
是Foo
的原型方法。是否可以确定实例方法是否在原型方法中调用?
我想是这样的:
bar
应该返回x
(传递到构造函数的参数),但只有当它是从一个原型法(的Foo.prototype
的方法)中调用。因此,bar
应检查当前执行上下文是否为Foo.prototype
函数,并且只有bar
应该返回x
。
在情况1中,当前执行上下文是全局代码,所以bar
调用的返回值应为undefined
。 (这个,我的意思是:我希望它在这种情况下返回undefined。)
但是在这种情况下,当前执行上下文是Foo.prototype
函数的函数代码,所以bar
调用的返回值应该是x
。
可以这样做吗?
更新:一个真实世界的例子:
function Foo(x) {
this.getX = function() { return x; /* but not always */ }
}
Foo.prototype.sqr = function() {
var x = this.getX(); // should return 3 (Case 2)
return x * x;
};
var f = new Foo(3);
f.getX(); // should return undefined (Case 1)
f.sqr(); // should return 9
情况1:getX
“直接” 称为 - >返回未定义
情况2:getX
从原型方法中调用 - > return x
我想你可以使用arguments.callee.caller,但它真的被弃用,不应该使用 – 2011-03-03 14:48:21
为什么你需要它吗?我找不到它的有用性... – 2011-03-03 14:56:05
@Martin看看我的问题中的更新。我正在将一个数字传递给'Foo'。我希望这个数字可以被原型方法所访问,但是我不希望这个数字能够在不使用原型方法的情况下被直接获取。 – 2011-03-03 15:02:56