私は比較的経験豊富な c# (およびその前の c++ Win32) 開発者であり、javascript を初めて使用し、this
ポインターに関して質問があります。
私は knockout.js を使用しており、subscribe と呼ばれる 1 つの関数がthis
変数を受け入れます。この変数は、コールバック関数内で設定されます。
Win32 の時代と C# の考え方からすると、どのコールバック関数でも、自分の状態を含むスコープ オブジェクトが必要です。
この場合、this
javascript を使用してコールバック スコープを設定しました。
私の質問は次のとおりです。
これですべてが機能します(興味がある場合は、ここで完全なフィドルを使用してください)が、何かひどいことをしましたか?
明示的なスコープ変数をパラメーターとして渡す代わりに使用される理由
this
はありますか (これにより、私にとって理解しやすくなります。これにより、動作が隠されます)。使用目的は何
this
ですか?
http://knockoutjs.com/documentation/observables.htmlから、次のように書かれています。
サブスクライブ関数は 3 つのパラメーターを受け入れます。 callback は通知が発生するたびに呼び出される関数で、 target (オプション) はコールバック関数で this の値を定義し、 event (オプション。デフォルトは「change」) はイベントの名前です。の通知を受け取ります。以下の例
myViewModel.personName.subscribe(function(oldValue) {
alert("The person's previous name is " + oldValue);
}, null, "beforeChange");
以下の私のコードスニペット:
var computedOptions = createComputedDepdency(viewModel[option.requires.target],option.data);
viewModel[option.optionsName] = computedOptions;
console.log("making callback scope object for: " + option.optionsName );
var callbackScope = {
callbackName: option.optionsName,
options: computedOptions,
selectedValue: viewModel[option.selectedName]
};
// when the list of available options changes, set the selected property to the first option
computedOptions.subscribe(function () {
var scope = this;
console.log("my object: %o", scope);
scope.selectedValue(scope.options()[0].sku);
console.log("in subscribe function for..." + scope.callbackName);
},callbackScope);