如何将功能发送给父母,然后在孩子内部使用?

时间:2014-07-31 17:51:03

标签: javascript

我正在尝试实现以下编码行为:

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>

1 个答案:

答案 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方法。