gpt4 book ai didi

javascript - 覆盖现有实例的方法

转载 作者:行者123 更新时间:2023-12-03 07:42:40 30 4
gpt4 key购买 nike

我正在尝试扩展已在 RequireJS 的帮助下创建的现有 Durandal 路由器插件实例。

应该重写方法 map() 以添加额外的映射参数。

如何从修改后的方法访问原始方法?

index.js

define([ 'durandal/app', 'app/childRouter'], function(
app, childRouter) {
childRouter.map([ {
route : 'details/:id',
moduleId : 'details/index',
}, {
route : 'details/tabs/base',
moduleId : 'details/tabs/base',
} ]);
childRouter.buildNavigationModel();

return {
router : childRouter
};
});

childRouter.js

define([ 'durandal/app', 'plugins/router'], function(
app, router) {

var childRouter = router.createChildRouter();
childRouter._map = childRouter.map;
childRouter.map = function(data) {
data.unshift({
route : [ '', 'grid' ],
moduleId : 'grid/index',
});
childRouter._map(data);//CALLS THE OVERRIDEN METHOD AGAIN INSTEAD OF ORIGINAL
};
return childRouter;
});

最佳答案

如果您仍想调用原来的“map”函数,则需要在覆盖它之前存储它。以这种方式替换函数有点“hacky”,但如果你真的必须这样做,这会起作用:

var childRouter = router.createChildRouter();
childRouter.originalMap = childRouter.map; // Save original
childRouter.map = function(data) {
data.unshift({
route : [ '', 'grid' ],
moduleId : 'grid/index',
});
childRouter.originalMap(data); // Call original
};

关于javascript - 覆盖现有实例的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35346110/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com