我查看了多个参考文献,但我找不到解决方案!
我不会'可以访问原始原型代码
修改
我们假设我的代码库中已经存在以下内容:
(function(){
function Test() {
this.game = 'rods';
}
Test.prototype.fail = function() {
setInterval(function() {
console.log('A', this.game);
}, 300);
}
var test = new Test();
test.fail();
})();
我无法访问原始声明,这不在我的代码库之外,我试图实现的是一种覆盖fail方法的默认功能的方法,但仍保留{{{ 1}}关键字。
我尝试了很多不同的事情,我的目标与此类似:
THIS
我希望看到完全相同的输出,但输出现在应该以 B 为前缀,而不是 A
我希望这很清楚。
答案 0 :(得分:0)
编辑:响应您的更新
这可能是对的。
Test.prototype.fail = function() {
setInterval(function() {
// since it's inside another function, 'this' no longer
// refers to the instance of Test, but the global 'window'
console.log('A', this.game);
}, 300);
}
它必须像我认为的那样工作:
Test.prototype.fail = function() {
setInterval(function() {
console.log('A', this.game);
}.bind(this), 300);
}
你说对象已经被实例化并且已经调用了fail()
吗?如果您想要访问setInterval
内的原始功能,,则无法 - 从功能外部无法访问其范围。如果没有原始clearInterval
电话的返回值,您也无法setInterval
。
如果你想覆盖单个实例上的函数,你可以如果你有权访问该实例,但如果已经调用了fail()
,你就无法做到清除原来的间隔。
test.fail = function() {
setInterval(function() {
console.log('B', this.game);
}.bind(this), 1000);
};
但如果您的情况与上次编辑的情况非常相似,那么您既无法访问test
实例,也无法访问setInterval
中的时间间隔和函数,那么您无法按照自己的建议行事。< / p>