Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/439.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 功能的动态替换_Javascript_Oop - Fatal编程技术网

Javascript 功能的动态替换

Javascript 功能的动态替换,javascript,oop,Javascript,Oop,我有一些代码,我想动态地替换一个函数,我考虑过使用ms dos中断中使用的习惯用法(从C++/asm后台到JS)。所以我写了一个代码片段,它可以。。。但如果函数使用“this”引用的任何内容,则不会。如何使它与这个变量一起工作,以及它是否也是一个原型函数。这个成语叫什么名字 谷歌搜索“方法链接”指的是另一个不相关的不值得注意的事情 function patient(a,s,d) { /*do something*/ } .... var oldFunc = patient; patient =

我有一些代码,我想动态地替换一个函数,我考虑过使用ms dos中断中使用的习惯用法(从C++/asm后台到JS)。所以我写了一个代码片段,它可以。。。但如果函数使用“this”引用的任何内容,则不会。如何使它与这个变量一起工作,以及它是否也是一个原型函数。这个成语叫什么名字

谷歌搜索“方法链接”指的是另一个不相关的不值得注意的事情

function patient(a,s,d) { /*do something*/ }
....
var oldFunc = patient;
patient = function(a,s,d) {
   if(a==something) oldFunc(a,s,d); else { /* do something*/ }
}
您可以使用它绑定到新函数

function patient(a, s, d) { /*do something*/ }

// ....

var oldFunc = patient,
    victim = function(a, s, d) {
       if (a == something) oldFunc(a, s, d); else { /* do something*/ }
    }.bind(this);

如果您试图重写一个函数,但却丢失了
上下文,那么有几种方法可以解决这个问题。考虑下面的简单例子。

类报警{
设定时间(时间){
这个时间=时间;
归还这个;
}
setEnabled(已启用){
this.enabled=已启用;
归还这个;
}
toString(){return`time:${this.time}\n启用:${this.enabled}`}
}
const myAlarm=新报警();
myAlarm.setTime(“12:00”).setEnabled(真);

log(myAlarm.toString())“方法链接”通常是“流畅接口”概念的同义词。通常,这意味着该方法返回当前实例,因此您可以执行类似于
person.setName(“Fred”).setAge(42).setDepartment(“Accounting”)
的操作。在JS的上下文中,这通常是有效的,除非您重新定义
this
的含义,但这通常也不会作为方法链接/fluent接口的一部分进行讨论。谢谢。我现在开始思考JS竞争对手C++在复杂度O.O中的应用。