使用Function.prototype.bind
将在这里帮助您
Person = function(x) {
this.x = x;
}
Person.prototype.myMethod = function() {
$('#myBtn').click(function() {
this.x;
}.bind(this));
};
您也可以在这里使用更好的代码分离
Person = function(x) {
this.x = x;
};
Person.prototype.myMethod = function {
$('#myBtn').click(this.clickHandler.bind(this));
};
Person.prototype.clickHandler = function(event) {
console.log(this.x);
};
请注意,如果您想支持旧版浏览器,请查看es5-shim
编辑
我在大约 6 个月后重新审视这个问题,我可能会以不同的方式编写上面的代码。我喜欢这里的私人/公开曝光。此外,不需要任何奇特的绑定或类似的东西^.^
function Person(x, $button) {
// private api
function onClick(event) {
console.log(x);
}
function myMethod() {
$button.click();
}
// exports
this.x = x;
this.myMethod = myMethod;
// init
$button.click(onClick);
}
var b = $("#myBtn"),
p = new Person("foo", b);
p.x; // "foo"
p.myMethod(); // "foo"
btn.click(); // "foo"