这是Decorator模式的一个工作示例:
class Dummy {
run() {
console.log('run');
}
}
function get() {
let instance = new Dummy();
instance.run = ((func) => {
return function() {
func();
console.log('decorator run');
}
})(instance.run);
return instance;
}
let obj = get();
obj.run();
Run Code Online (Sandbox Code Playgroud)
但是,如果我们将get函数更改为:
function get() {
let instance = new Dummy();
instance.run = function() {
instance.run();
console.log('decorator run');
}
return instance;
}
Run Code Online (Sandbox Code Playgroud)
我们将面临一个错误: VM68418:6 Uncaught RangeError:Dummy.instance.run(:6:32)超出了最大调用堆栈大小
为什么会这样?所述instance.run仍然是围绕原始方法的包装,而不"无用"附加的自执行的功能.
我很高兴听到答案