对继承和使用这个问题感到困惑

时间:2014-08-16 02:40:28

标签: javascript

说我有这个:

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)会引用什么?

3 个答案:

答案 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 而不是实例变量。 "这"函数内部不引用对象实例,而是引用全局对象(窗口对象)。callapply可以用来修改"这个"的实际含义,只要函数有效被称为。

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。