我正在使用多个原型来管理一些复杂的情况,并且在使用“this”时遇到了麻烦。我不是 100% 确定如何描述,因为我不熟悉正确的术语,但我会试一试。
函数 X 有一个变量指向函数 Y 中的函数。函数 Y 中的这个方法希望访问函数 Y 范围内的变量,但是当我使用 this 时,它指的是函数 X。
我创建了一个带有示例的JSFiddle,使用原型等(因为这是我发现自己所处的场景)。但是代码很短,所以我将它包含在下面:
var Abc = function(options) {
alert('2');
options = options || {};
this.myVar = options.myVar || 'Abc.myVar';
};
Abc.prototype = {
onEvent: function() {
alert('myVar: ' + this.myVar);
}
};
var Xyz = function(options) {
alert('3');
options = options || {};
this.listenFn = options.listenFn || function() {
alert('x');
};
this.myVar = options.myVar || 'Xyz.myVar';
};
Xyz.prototype = {
execute: function() {
alert('4');
this.listenFn();
}
};
$(document).ready(function(){
alert('1');
var a = new Abc();
var x = new Xyz({listenFn: a.onEvent});
x.execute();
});
我已经按代码执行的顺序发出警报。所以:
- 是文件的开始准备好了。
- 是 Abc 实例的创建。
- 是 Xyz 实例的创建,其中 Abc 实例的 onEvent 函数被分配给 Xyz 的 listenFn。
- 在 Zyz 上执行被调用的点内,该点又调用 Xyz 的 onEvent 并显示 this.myVar 的值。
我遇到的问题是,当在 Abc 的方法中时,“this”指的是 Xyz 实例。我需要能够为 Xyz 的实例设置/获取 myVar 的值。我怀疑我可以通过创建一个传递给新 Xyz 语句的函数来做一些混乱的事情,从而将 Abc 的实例传递回自身,但不幸的是,这对于我正在使用的东西是不可能的(也不是很优雅)。
干杯。