简介:我正在使用函数声明、new关键字和原型方法的OO Javascript(下面是示例)。我需要一种方法来引用每个方法中的“self”对象。如果我直接调用该方法,“this”似乎只能起作用,否则“this”似乎会指向调用该方法的任何内容。
更多细节:这是我的对象的简化版本。
function Peer(id) {
this.id = id;
this.pc = new RTCPeerConnection(SERVER);
this.pc.onevent1 = this.onEvent1;
this.pc.onevent2 = this.onEvent2;
}
Peer.prototype.doSomething = function() {
// create offer takes one param, a callback function
this.pc.createOffer(this.myCallback);
};
Peer.prototype.onEvent1 = function(evt) {
// here this refers to the RTCPeerConnection object, so this doesn't work
this.initSomething(evt.data);
};
Peer.prototype.myCallback = function(data) {
// here this refers to the window object, so this doesn't work
this.setSomething = data;
};
Peer.prototype.initSomething = function(data) {
// use data
};
以下是使用示例。
var peer = new Peer(1);
peer.doSomething();
// eventually something triggers event1
我尽可能地简化了代码并在注释中解释了问题。对于第一个场景(调用this.myCallback),我通过创建this的本地副本并将回调参数设置为匿名函数来创建了一个解决方法,该匿名函数使用我的本地this副本调用所需的函数。但是第二个场景更麻烦(触发事件)。
我想知道是否有一种不同的面向对象编程模型,其中每个方法始终具有对父对象的正确引用,而不管如何调用该方法?或者是否有一种不同的方式将对象创建为自定义对象的属性并将其事件绑定到自定义对象的方法?如果这很令人困惑,请原谅!请注意,我的问题与RTCPeerConnection无关,那只是我目前正在工作的项目。
我找到了这篇文章:http://www.alistapart.com/articles/getoutbindingsituations,但我不太确定如何使用这些信息?