私は次のようなコードを使用しています
function Basket () {
this.items = new Array();
}
Basket.prototype.addItem = function(item) {
this.items.push(item);
setTimeout(this.showItems, 1000);
};
Basket.prototype.showItems = function() {
console.log('items in Basket: '+this.items.join(', '));
}
var b = new Basket()
b.addItem('bananas')
// -> Uncaught TypeError: Cannot call method 'join' of undefined
addItemメソッドを呼び出すと、showItemsメソッドが適切に呼び出されますが、showItemsメソッドでは、変数「this」はBasketオブジェクトを参照しません。Prototype Frameworkを使用すると、次のようなことができます。
setTimeout(this.showItems.bind(this), 1000)
これにより、変数「this」がshowItemsメソッドのBasketオブジェクトにバインドされます。
質問:jQueryでそれをどのように達成できますか?次のように呼び出しメソッドをラップするよりも洗練されたメソッド(ベストプラクティス)はありますか?
// ...
$this = this
setTimeout(function() {$this.showItems($this)}, 1000)
Basket.prototype.showItems = function ($this) {
console.log('items in Basket: '+$this.items.join(', '));
}
また、誰かが有用なキーワードを投稿して、そのような問題をどのように検索できるかを教えていただければ幸いです。確かに、これを求めているのは私だけではありません。しかし、当然のことながら、フレームワークを念頭に置いていない場合、「プロトタイプ」を検索するのは非常に困難ですが、オブジェクトの拡張(またはそれをどのように呼び出すか)です。
どうも