覆盖嵌套函数或附加新功能
Overwrite a nested function or attach new functionality
我正在使用必须保持不变的外部JavaScript库。每当调用/完成特定函数时,我需要启动功能。
以前我会覆盖有问题的函数并将我的代码添加到末尾。但是,此外部库的最新版本具有嵌套在函数中的函数。
有没有办法覆盖/附加新功能到第三方功能?
function View() {}
window.View = View;
View.FunctionINeedToChange = View_FunctionINeedToChange;
function View_FunctionINeedToChange(a) {
// Code
}
}
// I need my code to execute here
"View_FunctionINeedToChange"在第三方脚本内部调用,但是我唯一可以覆盖的是"View.FunctionINeedToChange",所以我的更改没有任何区别。
如果你在闭包之外,则不能覆盖闭包内的函数。此外,在该特定库中添加自定义逻辑也不是一件好事,因为当您将其升级到较新版本时,您将丢失自定义工作。
定义原型对象后,可以使用 Object.defineProperty
向实例添加函数。
view = new View()
Object.defineProperty(view, 'FunctionINeedToChange', {
value: function (input, param, etc) {
// your code here
}
});
或者,您可以将函数附加到 View
的原型。
View.prototype.FunctionINeedToChange = function (input, param, etc) {
// your code here
};
不同之处在于,第一个示例只会更改view
的单个实例以使用您的功能,而第二个示例将更改创建的所有实例(甚至是过去创建的实例!
但是,如果您的第三方代码在看到您添加到View
的更改之前执行自己的代码,或者如果它使用它的词法范围定义(很可能是这种情况),那么所有这些都毫无意义。
我认为您最好不要尝试通过猴子修补其内部对象定义来更改第三方代码,而是依靠构建自己的实例并根据自己的需要更改它们。
相关文章:
- 如何迭代json对象的嵌套属性并创建新的数组列表
- 带有嵌套表的数据表;t没有功能
- 对嵌套表单中的新字段重新应用 jquery - Rails 3
- AJAX / JQuery - 在新表行上打印每个嵌套的子项
- 如何将新项推送到不可变JS中的深度嵌套记录中
- 向嵌套类添加新元素
- 覆盖嵌套函数或附加新功能
- 如何使用布局管理器重新排序/排序嵌套视图而不重新渲染
- “嵌套模型表单”可以正确添加新字段,但 coffeescript 行为不会影响页面上现有字段等新字段
- 如何使用嵌套的For循环在新行上打印数组中的数组值
- 使用Javascript查找元素组并将它们嵌套在一个新元素中
- 是否有可能在运算符内部返回新的可观察项,嵌套可观察项
- 嵌套的“on”单击和按键功能不起作用
- 嵌套可排序新添加的项目不会移动
- 遍历嵌套的json并将其自定义为一个新的json
- 我可以嵌套Ajax调用吗?假设在前一个xmlhttprequest的回调中启动一个新的xmlhttprequest
- 在嵌套循环Javascript中播放功能
- 剑道网格:添加新的行嵌套对象停止工作
- 过滤对象键并创建新的嵌套键
- 茧在Rails中加载了一个新的嵌套表单后,如何执行JavaScript