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