我是一個相對有經驗的C#(以及之前的那個C++ Win32)開發人員,我是JavaScript新手,並且有關於this
指針的問題。正確使用這個指針在JavaScript中的回調knockout.js
我使用的是knockout.js,而一個名爲subscribe的函數接受一個this
變量,它將在回調函數中設置。我從我的思維方式從Win32天和C#,在任何回調函數我想要一個範圍對象,其中包含我的狀態。
在這種情況下,我使用this
JavaScript的東西來設置我的回調範圍。
我的問題是:
現在一切正常(full fiddle here if you are interested),但我做了什麼可怕的事情?
是否有任何理由
this
被用來替代明確 範圍變量作爲參數傳遞(即會使事情更容易理解爲 對我來說,這使得運作那種隱藏)。this
的用途是什麼?
從http://knockoutjs.com/documentation/observables.html它說:
的訂閱功能接受三個參數:回調是,每當通知發生被調用的函數,目標(可選)定義在回調函數的這個值,和事件(可選;默認爲「更改」)是要接收通知的事件的名稱。下面
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);
不應該'VAR範圍=本;'是回調外...? –