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