我正在尝试使用SignalR。当我的客户端定义的回调是属于javascript对象的方法时,那么当在该函数内部时(当它从SignalR调用时)'这个'指集线器对象。我的问题是如何获取容器javascript对象,以便我可以访问它的变量和函数?
levelsMC.coin = visible = false;
答案 0 :(得分:1)
您正在创建一个对象并将其存储在名为gameload的变量中,因此您可以通过gameload变量访问该对象:
var gameLoad = {
foo: "foo",
bar: function() {
console.log(gameLoad.foo);
}
};
gameLoad.bar();
https://jsfiddle.net/nk4hv96c/
编辑:
我不认为下一个建议可以作为答案,因为您特别要求使用JavaScript,但在编写JavaScript时我使用的是TypeScript。
TypeScript有助于为您的代码提供更多结构,并提供有用的功能,例如能够将“this”保留为“您正在操作的对象”。
https://basarat.gitbooks.io/typescript/docs/classes.html
https://basarat.gitbooks.io/typescript/docs/arrow-functions.html
编辑2:
如果你想使用构造函数,那么你可以将“this”保存到构造函数中的变量。
function Foo() {
var self = this;
this.Bar = "Bar";
this.Baz = function () {
console.log(self.Bar);
};
}
var foo = new Foo();
foo.Baz();
https://jsfiddle.net/8b7kjmau/
编辑3:
此示例显示了“self”的可用性,即使“this”已更改。
它使用jQuery click事件而不是SignalR来改变“this”。
function Foo() {
var self = this;
this.Bar = "Bar";
this.Baz = function () {
console.log(this.self);
console.log(this.id);
console.log(self.Bar);
};
}
var foo = new Foo();
$("#button").click(foo.Baz);
https://jsfiddle.net/gr7dzgqr/
输出:
Undefined
button
Bar