在'静态方法'中使用javascript

时间:2011-12-02 13:42:48

标签: javascript this

Class.method = function () { this.xx }
Class.prototype.method = function () { this.xx }
var clazz = new Class();
clazz.method();

当我在函数中调用第4行this时会引用clazz 但是当执行Class.method()时,this会引用什么?

4 个答案:

答案 0 :(得分:1)

this函数中的

Class.prototype.method仍将引用Class实例。这不是静态方法,静态(即每个类一个)方法类似于:

Class.method = function () {
    // I am a static method
};

例如:

var Example = function () {
    this.name = "DefaultName";
};

Example.prototype.setName = function (name) {
    this.name = name;
}

var test = new Example();
test.setName("foo");

console.log(test.name); // "foo"

答案 1 :(得分:0)

如果您在构造函数本身上调用.method()(没有new),this仍将绑定到Class对象。 this值总是取决于调用的类型,因为您从对象(=方法)中调用函数,this将绑定到该上下文。

答案 2 :(得分:0)

Class = function() {
   this.xx = "hello";
}
Class.method = function () { this.xx } 
Class.prototype.method = function () { alert(this.xx) }
var clazz=new Class();
clazz.method(); // display "hello";
Class.method() // undefined

答案 3 :(得分:0)

它将引用调用Class.method函数的对象。