非文字参考自我

时间:2017-05-24 20:49:58

标签: javascript jquery html5

我在javascript中有一个星球'类'。当用户点击html5画布时,会调用相应行星的manageClick函数,该函数应该更改某个div的内容。内容应更改为按钮。如果用户点击它,那么应该调用行星的函数createShip。

现在的问题是如何传递对行星本身的引用?我试图在任何对象上创建一个调用createShip()的新函数,然后使用参数'this'调用它。但它似乎没有用。这样做的正确方法是什么?

Planet.prototype.createShip =function() {...}

Planet.prototype.manageClick=function() {
    $(".dropdown").html("<button onclick=\"buyship(this)\">Buy a ship</button>");
}

function buyship(obj) {
    obj.createShip();
}

2 个答案:

答案 0 :(得分:2)

不要使用onclick。而是使用jquery创建按钮并将函数绑定到click事件。使用函数的.bind方法,您可以显式地将this值绑定到函数,而不是将其作为参数传递。

Planet.prototype.createShip =function() {...}

Planet.prototype.ManageClick=function() {
    var self = this;
    var buyShip = $("<button id='buyShip'>Buy a ship</button>").click(buyship.bind(self))
    $(".dropdown").append(buyShip);
}

function buyship() {
    this.createShip();
} 

小提琴:https://jsfiddle.net/brko5jr7/1/

答案 1 :(得分:0)

我讨厌使用this,因为如果你将任何对象的方法连接到jQuery事件处理程序之类的东西,this如果不对事情进行编码就会成为后方的真正痛苦。

我不像你那样使用prototype方法编写类,但更喜欢将它们写成函数声明。

var Planet = function(){
    var ref = this;
    ref.CreateShip = function () {
        ref.xyz = 123456;
    };

    ref.ManageClick = function(){
        ref.someproperty = "something";
    }
}

你会立即注意到,我宣布变量ref指向范围内的对象,然后我在成员中使用ref而不是this。在我看来,它提高了可读性。 YMMV。

实例化仍然是相同的:

var instance = new Planet();