我只是在练习一点JavaScript。我的目标是创建一个可以使用.invoke()调用另一个函数的函数,直到调用.revoke(),然后使该函数无效。用JavaScript恢复无效函数
后来,我添加了.porcupine(),理论上它应该首先调用函数(在本例中为alert()),然后将其重新应用到原始“temp”。但问题是,在被撤销后,temp不知道,因此它不能再调用任何东西。有没有非常明显的这一点,我错过了或解决方案必须相当混乱?
var denullifier;
function revocable(unary) {
if (denullifier === null)
denullifier = unary;
return {
invoke: function(x) {
return unary(x);
},
revoke: function() {
var nullifier = unary;
unary = null;
return nullifier.apply(this, arguments);
},
porcupine: function() {
unary = denullifier;
return unary.apply(denullifier, arguments);
}
};
};
console.log('----------');
temp = revocable(alert);
temp.invoke(7); ///alerts 7
temp.revoke();
temp.porcupine(); //exception
temp.invoke(7); //doesn't get here
+1,我完全错过了'WRONG_THIS_ERROR' :-) – Bergi