SignalR客户端回调是对象功能,而这个'

时间:2017-03-22 18:02:49

标签: javascript signalr

我正在尝试使用SignalR。当我的客户端定义的回调是属于javascript对象的方法时,那么当在该函数内部时(当它从SignalR调用时)'这个'指集线器对象。我的问题是如何获取容器javascript对象,以便我可以访问它的变量和函数?

levelsMC.coin = visible = false;

1 个答案:

答案 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/

这也是TypeScript处理它的方式:http://www.typescriptlang.org/play/#src=class%20Foo%20%7B%0D%0A%20%20%20%20public%20Bar%20%3D%20%22Bar%22%3B%0D%0A%0D%0A%20%20%20%20public%20Baz%20%3D%20()%20%3D%3E%20%7B%0D%0A%20%20%20%20%20%20%20%20console.log(this.Bar)%3B%0D%0A%20%20%20%20%7D%3B%20%20%20%20%0D%0A%7D

编辑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