我在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();
}

最佳答案

不要使用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/

10-07 14:34