Javascript 如何从拥抱包装中引用新实例“this”?
我想了解在特定情况下如何引用Javascript 如何从拥抱包装中引用新实例“this”?,javascript,this,new-operator,Javascript,This,New Operator,我想了解在特定情况下如何引用这个,比如在“模块包装器”中包含一个“类” 看看这个例子: var MyClass = (function() { theClass = function() { // Position A this.myValue = 3; // some number. }; theClass.prototype.initSomething = function() { // Position B $(someBut
这个
,比如在“模块包装器”中包含一个“类”
看看这个例子:
var MyClass = (function() {
theClass = function() {
// Position A
this.myValue = 3; // some number.
};
theClass.prototype.initSomething = function() {
// Position B
$(someButton).on('click', this.myCallback);
};
theClass.prototype.myCallback = function(event) {
// Position C
console.log(??this??.someValue);
}.bind( ????? /* Position D */);
return theClass;
})();
var myObject = new MyClass();
myObject.initSomething();
如果我创建类的新instance,则在位置a处,此
指的是新创建的对象。没关系
在位置B处,此
仍指新创建的对象。那还可以
我想解决的问题发生在位置C,其中
此
将指向按钮。因此,我想将myCallback()
绑定到新创建的对象。但是,在位置D,我在新创建的实例之外。但我知道原始对象和原型以及更多。那么,我如何引用新创建的对象呢?您正在犯思维错误
位置D仅运行一次。这可能是在页面加载之后发生的
但是这里有很多不同的指针。每个new()
都将创建一个新实例和一个新的指针
如果试图在包装函数中存储新的此指针,则需要管理指针列表
优雅的方法是在新实例化的对象中组织所有绑定,其中包含这些信息。像这样:
var MyClass = (function() {
theClass = function() {
// Position A
this.myValue = 3; // some number.
};
theClass.prototype.initSomething = function() {
// Position B
var myBoundCallback = this.myCallback.bind(this);
$(someButton).on('click', myBoundCallback);
};
theClass.prototype.myCallback = function(event) {
// Position C: this is now the newly instanciated object as it was bound at position B.
console.log(this.someValue);
};
return theClass;
})();
var myObject = new MyClass();
myObject.initSomething();
谢谢@deceze的帮助编辑。这与这个
关键字的工作方式无关。这是关于识别它的边界。