的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"
我想在這裏指出,'bind()的'這裏指的是ES5的'Function.prototype.bind是很重要的()'而不是'JQuery.bind()' –
@WillM,我鏈接的文檔是MDN JavaScript文檔;而不是jQuery API。如果OP實際上在意進一步挖掘,這應該是非常明顯的。不過,我更新了鏈接文字。 – naomik
只是想幫忙,@naomik ... –