说我有这个:
function something() {
//does something here
}
something.prototype = {
xy: function(n) {
this.a = n;
}
y: function() {
b = this.xy(n);
}
}
我的问题是,我知道在this.a
中,this
指的是something
。但是,b=this.xy(n)
是否允许,如果允许,this
中的b=this.xy(n)
会引用什么?
答案 0 :(得分:1)
在this.a
中,this
未提及something
。您可以期望它引用something
的实例,但this
可以使用Function.prototype.call
或{{绑定到任何内容3}}。如果您拨打foo.y()
的方式与调用foo.xy()
的方式相同,则会引用foo
并且该用法有效,是的。除此之外,this
将是正确的方法,允许从something
继承的任何内容覆盖xy
。
答案 1 :(得分:1)
"这个"的实际参考并不总是相同的,并根据上下文和你如何调用函数而改变。
例如假设你有一个全局变量" a"
var a;
...
something.prototype = {
xy: function(n) {
this.a = n;
}
...
}
var obj = new something();
obj.xy.call(this, 10); // set the context to global. this == 'global' here
console.log(obj.a); //undefined
console.log(a); //10
以上代码调用xy函数,但设置" this "到全局对象并修改全局变量 a 而不是实例变量。 "这"函数内部不引用对象实例,而是引用全局对象(窗口对象)。call和apply可以用来修改"这个"的实际含义,只要函数有效被称为。
obj.xy(10);
console.log(obj.a); // 10
这里你要设置对象实例的上下文和"这个"正确引用对象实例并获得预期的输出。
并回答你的问题
是允许的b = this.xy(n),如果是这样,那么b = this.xy(n)
这是允许的,结果将再次取决于您正在进行的调用的上下文。
答案 2 :(得分:-1)
好吧,我假设你的函数是一个构造函数,我创建了一个对象:
var obj = new something().
"这"关键字然后参考obj。你可以这样做:
obj.y();
然后将obj.a设置为值n。我认为那是你打算做的......
另外,你的xy函数没有返回语句,没有任何赋值给b。