我是一个相对有经验的 c#(在那个 c++ Win32 之前)开发人员,我是 javascript 新手,并且对this
指针有疑问。
我正在使用 knockout.js,一个名为 subscribe 的函数接受一个this
变量,该变量将在回调函数中设置。
根据我从 Win32 天和 C# 开始的思考方式,在任何回调函数上,我都想要一个包含我的状态的范围对象。
在这种情况下,我使用了this
javascript 来设置我的回调范围。
我的问题是:
现在一切正常(如果您有兴趣,请在此处使用完整的小提琴),但是我做了什么可怕的事情吗?
是否有任何理由
this
使用而不是将显式范围变量作为参数传递(这对我来说会让事情更容易理解,这使得工作有点隐藏)。预期用途是
this
什么?
从http://knockoutjs.com/documentation/observables.html它说:
subscribe 函数接受三个参数: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);