2016-09-19 7 views
0

私は今まで私のWebアプリケーションで次の構文を使用してきました。コンテキストを設定する際にバインドを使用する代わりに、どのような方法がありますか?

myObj = { 
    msg: 'You have logged ', 
    init: function(){ 
     $('input').on('click', this.log.bind(this)), 
    }, 
    log: function(e){ 
     console.log(this.msg + $(e.target).val()); 
    } 
} 

私はinit関数を呼び出すことができます。

function.bind(obj); 

は、だから私のような物を持っている与えられました。 myObj.init();

しかし、問題は、.bind関数()が推奨されなくなることです。それはjQueryのバインド関数かJavaScriptのバインド関数ですが、廃止予定です。

これが非推奨になるJavaScript関数になる場合は、その代替手段は何ですか?

+3

Googleのそれこの例では必要ありません...それはそれはjQueryのは廃止されているのです、そこにjQueryのドキュメント毎 – Li357

+2

でなければなりません。 – Li357

+7

JS '.bind()'関数は廃止されることはありません – Alnitak

答えて

2

しかし、問題は、私は.bind関数は()は廃止されますことを読んでいます。それはjQueryのバインド関数かJavaScriptのバインド関数ですが、廃止予定です。

それはその代替何であるか、その後廃止されるとしているJavaScript関数になるだろうされている場合は、あなたがFunction.prototype.bind

を使用している、$.bindを使用していないので、問題はありませんか?

Function.prototype.bindは推奨されていません。あなたのコードは

// no `var`, `let` or `const` keyword 
myObj = { 
    msg: 'You have logged ', 
    init: function(){ 
    // event handlers usually pass an `event` object 
    $('input').on('click', this.log.bind(this)), 
    }, 
    log: function(){ // no `e` param here 
    console.log(this.msg + $(e.target).val()); 
    } 
} 

var myObj = { 
    msg: 'You have logged ', 
    init: function(){ 
    $('input').on('click', this.log.bind(this)), 
    }, 
    log: function(e){ 
    console.log(this.msg + $(e.target).val()); 
    } 
} 

し、完全に更新することでしたあなたのコードについて注意することはほとんど罰金、以下


いくつかの点以下の例外ですES6を使用してコードを表現する別の方法 - arrow functions xical thisので何Function.prototype.bind

const myObj = { 
    msg: 'You have logged ', 
    init() { 
    $('input').on('click', event => this.log(event)); 
    } 
    log (event) { 
    console.log(this.msg, $(event.target).val()); 
    } 
}; 
+0

ありがとう@naomikはい私はjQueryとJavascriptのバインド関数の間に混乱がありました。それは今クリアされています。 – user2146323

+0

偉大な答えと説明! – Li357

1

現在、$.proxy()を使用できます。 note $.proxy()は、jQueryの将来のバージョンでは廃止予定です。

$('input').on('click', $.proxy(this.log, this)) 
+0

'input'が' e.target'になることを期待している場合は、 'log'関数で' e'パラメータもありません。 – guest271314

+0

ありがとうございます。私は質問を更新しました。 – user2146323

関連する問題