我正在尝试实现以下编码行为:
addAssetsTab(false, false, false).action = addAssetAction;
函数addAssetsTab将返回一个带有一个名为action inside的函数的对象,我希望然后将该函数设置为当前作用域中的某个函数,并且我希望子函数在调用动作后使用它。
var tabs = [];
addPeopleTab = function (filter, sort, viewModes) {
var promise = { action: function () { } };
tabs.push(
angular.extend({}, DataTemplates.headerContextualTab, {
id: 'people',
label: 'People',
classes: 'icon-group',
count: 0,
action: promise.action,
filter: filter,
sort: sort,
viewModes: viewModes
}))
return promise;
};
显然由于某种原因,一旦我返回名为promise的对象,对名为promise的本地对象的引用就会丢失。我尝试返回一个函数,但引用也会丢失。如何做到这一点的任何想法?< / p>
答案 0 :(得分:1)
问题不在于您如何归还promise
或设置promise.action
;它是将<{1}}函数传递给promise.action
的方式;您正在传递函数引用,因此当您以后更新 angular.extend
(指向新的函数引用)时,您的扩展对象仍然指向到旧的功能参考。
相反,你可以这样做;
promise.action
这样,由于它保留了对angular.extend({}, DataTemplates.headerContextualTab, {
id: 'people',
label: 'People',
classes: 'icon-group',
count: 0,
action: function () {
return promise.action.apply(this, arguments);
},
filter: filter,
sort: sort,
viewModes: viewModes
}));
的引用,因此它始终能够解析为promise
的当前值。使用Function.prototype.apply()
可以将传递给promise.action
方法的参数转发到action
方法。