我处于覆盖另一个函数内部的js函数的位置。
例如:
function parentMethod(){
function someOtherMethod(){
alert("Am someone")
}
function childMethod(){
alert("Am Child")
}
childMethod()
}
childMethod = function(){
alert("Am Child New")
}
实际上我想要覆盖sharepopint提供的开箱即用的js scirpt的子函数。如果我覆盖parentMethod
它正常工作但它会产生1300行代码重复,因为我们是实际上覆盖了许多可用功能中的一个。
如何在没有代码重复的情况下实现它。 任何帮助将不胜感激。
提前致谢。
答案 0 :(得分:3)
除非正确定义父函数,否则您提到的childMethod在父级范围之外是不可访问的,即您尝试访问的childMethod未链接到父级。 e.g。
var parentMethod = function (){
this.someOtherMethod = function (){
alert("Am someone")
}
this.childMethod = function(){
alert("Am Child")
}
}
没有正确的方法来实现父类的当前状态,但是为了一个工作示例,我做了一个工作小提琴。 https://jsfiddle.net/eaqnnvkz/
var parentMethod = {
someOtherMethod: function() {
alert("Am someone")
},
childMethod: function() {
alert("Am Child")
}
};
parentMethod.childMethod();
parentMethod.childMethod = function() {
alert("Am Child New")
};
parentMethod.childMethod();
答案 1 :(得分:0)
不幸的是,除非编写脚本以将子函数附加到可访问的作用域,否则无法有选择地覆盖它。默认情况下,函数内部的函数不能单独访问。
尝试这种方法可能是通过parentMethod()
获取parentMethod.toString()
的来源,然后使用正则表达式替换子方法,然后替换原始方法使用eval()
更改版本的函数的版本。这可能不是一个长期的解决方案,我个人不鼓励它,但它理论上会达到要求的效果。