3

我正在尝试使用 Javascript 创建一个“类”工厂,以便我可以创建不同类型的对象。

这是我正在使用的功能:

var Class = function(methods) {   
    var klass = function() {
        var self = this;
        this.initialize.apply(this, arguments);
    };  

    for (var property in methods) { 
       klass.prototype[property] = methods[property];
    }

    if (!klass.prototype.initialize) klass.prototype.initialize = function(){};

    return klass;    
};

然后我可以这样做:

var myObject = Class({
    initialize: function() { console.log(self);}
});
var createdObject = new myObject();

但是,console.log(self) 总是指的是窗口,我希望它指的是对象本身。

我知道这是一个范围问题,但我对如何创建对对象的引用感到困惑?

我正在尝试使用 Javascript 创建一个“类”工厂,以便我可以创建不同类型的对象。

这是我正在使用的功能:

var Class = function(methods) {   
var klass = function() {
    var self = this;
    this.initialize.apply(this, arguments);
};  

for (var property in methods) { 
   klass.prototype[property] = methods[property];
}

if (!klass.prototype.initialize) klass.prototype.initialize = function(){};

return klass;    

};

然后我可以这样做:

var myObject = Class({
    initialize: function() { console.log(self);}
});
var createdObject = new myObject();

但是,console.log(self) 总是指的是窗口,我希望它指的是对象本身。

我知道这是一个范围问题,但我对如何创建对对象的引用感到困惑?

例如,如果我想做:

var myObject = Class({
    initialize: function() { 
       $('#myDiv').click( function() {
           self.anotherFunction();
       });
    },

    anotherFunction: function() {
        alert('hi');
    }
});

我需要能够用自己引用“myObject”...

4

1 回答 1

3

使用this而不是self. self 将无法访问以initialize发挥作用,因为它是在范围之外定义的klass self

最好的选择是self在每个函数中定义为我提供的最后一个解决方案。

var myObject = Class({
    initialize: function() { console.log(this);}
});

或者

 var myObject = Class({
        initialize: function() { console.log(createdObject);}
    });

或者

var myObject = Class({
            initialize: function() { var self = this; console.log(self );}
        });
于 2012-10-24T19:15:12.290 回答