JavaScript中的'this'使用方法

3
假设我有如下代码:
var object1 = {};
object1.class1 = function() {
    this.property1 = null;
    this.property2 = 'ab';
}

在这种情况下,“this”代表什么?是object1还是class1?每当我想在对象内定义一个类构造函数时,最好的方法是什么?

1
我认为这个链接会对你有所帮助:http://www.phpied.com/3-ways-to-define-a-javascript-class/ - Haim Evgi
我觉得我刚学到了一些东西:object1不能有另一个实例。谢谢! - Khoi
2个回答

2
class1类中,因为您无法创建object1类型的对象。
但是,如果代码如下:
function object1() {
    this.class1 = function() {
        this.property1 = null;
        this.property2 = 'ab';
    }
}

您可以有以下选项:
var obj = new object1();
obj.class1();
obj.property2; // => 'ab';

var cls = new obj.class1();
cls.property2; // => 'ab';

因此,这可能取决于上下文。

话虽如此,我曾经见过“this”确实指的是object1的情况。如果属性已经存在于object1中,那么class1就只是一个简单的方法。唉,要是有一种确定的方法就好了。 - Khoi
1
@Khoi:不是的。this表示传递给方法的对象。如果您愿意,您可以使this指向另一个完全无关的对象,例如:var test = {}; obj.class1.call(test);,然后test.property2将是ab。在JavaScript中,this仅取决于调用上下文,而与其他任何事情都无关。 - Mewp
没错,这解决了问题。我只需要明确定义调用上下文。谢谢! - Khoi
这个答案的第一行是不正确的。在 OP 的例子中,如果你调用 object1.class1()this 将会指向 object1。同时,也可以使用 var object2 = Object.create(object1) 来复制 object1 - JLRishe

1
如果你这样调用它:
object1.class1();

那么this将指向object1


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接