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) は常に Window を参照しているので、オブジェクト自体を参照するようにしたいです。

これがスコープの問題であることはわかっていますが、オブジェクトへの参照を作成する方法について混乱していますか?

さまざまなタイプのオブジェクトを作成できるように、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) は常に Window を参照しているので、オブジェクト自体を参照するようにしたいです。

これがスコープの問題であることはわかっていますが、オブジェクトへの参照を作成する方法について混乱していますか?

たとえば、やりたい場合:

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

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

「myObject」を自己で参照できるようにする必要があります...

4

1 に答える 1

3

thisの代わりに使用しselfます。initializeself は、のスコープ外で定義されているため、関数にアクセスできません。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 に答える