ホームページ >ウェブフロントエンド >jsチュートリアル >this スキルと self_javascript スキルの使用方法についての説明

this スキルと self_javascript スキルの使用方法についての説明

WBOY
WBOYオリジナル
2016-05-16 18:22:011581ブラウズ

2 日前、私は Chrome 拡張機能を作成していました。コンテンツとバックグラウンド間の対話は、次のような非同期メソッドで実装する必要があるためです。

コードをコピー コードは次のとおりです:

var Test = new Class({
options: {},
initialize: function(args) {
chrome.extension .sendRequest({ 'type ':'options' }, function(options) {
this.options = options;
...
});


これは Test オブジェクトであるはずですが、コールバック メソッドでは空です。これをパラメータとして渡してからコールバックする必要がありますか?幸いなことに、mootools にはバインドという優れたメソッドがあります。


コードをコピーします コードは次のとおりです。
var Test = new Class({
オプション: {},
初期化: function(args) {
chrome.extension.sendRequest({ 'type':'options' }, function(options) {
this.options = options;
… …
}.bind(this));
}
});


これでOKです:


コードをコピーします コードは次のとおりです:
var Test = new Class({
options: {},
初期化: function(args ) {
chrome.extension.sendRequest({ 'type':'options' }, function(options) {
this.options = options;
$each(this.options, function(o, i ) {
if (o == '1') {
this.fun1();
} else {
this.fun2(); >}.bind(this));
}.bind(this));
fun1: 関数 {},
fun2: 関数 {}
}); >


bind を使用しても、これがどれであるかを区別するのは簡単ではありません。実際のコードはこれよりもさらに恐ろしいものです。場合によっては、このクラスの代わりに他の変数を指すためにこれが必要になることがあります。
最も一般的に使用される解決策は次のとおりです:



コードをコピーします

コードは次のとおりです: var Test = new Class({ options: {}, initialize: function(args) { var _self = this;
chrome.extension.sendRequest({ 'type': 'オプション' }, function(options) {
_self.options = オプション;
$each(_self.options, function(o, i) {
if (o == '1') {
_self.fun1();
} else {
_self.fun2();
}
}); {},
fun2: function {}
});


これを置き換えるために _self 変数を特別に定義しました。これはどのようなものですか?パイソン!
今ようやく、Python の自己は決して不要ではないことに気づきました。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。