javascript - 保存上下文
问题描述
我发现了一些有趣的问题。任务是对所有子函数进行包装,这将延迟实现。
function someFunc() {
console.log(this.someProp);
}
var obj1 = {
someProp: 1,
method1: someFunc,
};
var obj2 = {
someProp: 2,
method2: someFunc,
};
Function.prototype.defer = function(ms) {
let self = this;
setTimeout(self, ms) //<<-- lose context(obj1, obj2)
};
obj1.method1(); // 1
obj2.method2(); // 2
obj1.method1.defer(1000); // 1 after 1 sec, now is undefined
obj2.method2.defer(1000); // 2 after 1 sec, now is undefined
解决方案
尝试使用 bind
. 允许设置在调用函数或方法时bind()
将绑定到哪个特定对象。this
function someFunc() {
console.log(this.someProp);
}
var obj1 = {
someProp: 1,
method1: someFunc,
};
var obj2 = {
someProp: 2,
method2: someFunc,
};
Function.prototype.defer = function(ms) {
setTimeout(this, ms) //<<-- lose context(obj1, obj2)
};
obj1.method1(); // 1
obj2.method2(); // 2
obj1.method1.bind(obj1).defer(1000); // 1 after 1 sec, now is undefined
obj2.method2.bind(obj2).defer(1000); // 2 after 1 sec, now is undefined
推荐阅读
- nginx - nginx 可以通过哪些方式向我的应用服务器发送请求?
- java - wsdl2java 生成带有长名称的 java 类
- python - Python Scrapy OSError: [WinError 123] 文件名、目录名或卷标语法不正确:
- c++ - cv::Mat::clone() 是否比分配由 cv::Mat::zeros() 创建的矩阵更有效?
- python - 打破 try-except 块
- java - Maven TestNG 测试未从命令行运行
- vba - 使用文件名的特定字段将每条记录打印到单独的 pdf 文件
- odoo - Odoo 删除销售订单报告的页眉和页脚
- python - 使用 Pandas .to_html() 时,我可以使用自定义格式器应用 background_gradient 颜色图吗?
- javascript - 如何更新firebase中数组中项目的值?