什么's传递对象的最佳或最常见方式'的方法作为回调
What's the best or most common way to pass an object's method as a callback?
我遇到了一个问题,需要将对象的方法作为回调传递,而该方法使用this
。显然,这是不可行的,因为当作为回调调用(而不是通过所属对象)时,this
将指向全局对象。
我读到关于这个问题的解决方案,想知道最好或最常见的解决方案是什么
目前,我的"班级"是这样的:
function MyClass(value) {
this.value = value;
}
MyClass.prototype.alertValue = function() {
alert(this.value);
};
选项A-将类更改为如下所示:
function MyClass(value) {
this.value = value;
this.alertValue = function() {
alert(value);
};
}
优点——简单。但缺点是每次实例化都会复制alertValue
,这就是我们通常在prototype
上放置方法的原因。
选项B-使用.bind()
:
callbackReceivingFunction(myObject.alertValue.bind(myObject));
我可以为此编写一个实用方法:
function bind(object, methodName) {
return object[methodName].bind(object);
}
解决这个问题最常用的方法是什么?它的优点和缺点是什么?我想出的两种方法似乎都很不雅,还有别的方法吗?
我建议使用bind()。请记住IE<=8不支持Function.prototype.bind()
,所以您希望使用polyfill。如果必须为单个类绑定一组方法,请查看Underscore/lodash的_.bindAll()
方法。
例如:
_.bindAll(myObj, 'alertValue', 'otherMethod', 'anotherMethod')
相关文章:
- 为什么这在IE中的工作方式与在Firefox中不同
- 在AngularJS应用程序中使用封装指令和路由的推荐方式是什么
- Windows8应用程序(html&Javascript):从图片库(除了文件选择器)显示图像的另一种方式
- 在localhost Dev Box上测试JSONP请求的最佳方式
- 使用javascript存储变量的最安全方式
- 以可优化的方式使用requirejs加载模板
- 在Highcharts中,我们可以通过任何方式在渲染图表之前获得plotWidth和plotHeight
- 任何方式使AJAX调用Gmail API,而无需通过JS库
- 为react组件传递道具的最佳方式
- 让Webpack管理Quirky AMD定义的最佳方式
- 在承诺链中处理早期回报的最佳方式
- 如何“;过滤器”;或者以其他方式重构该数据
- 您有更好的动态方式来缩短复杂的代码jquery吗
- 在ng重复循环中显示条件内容的最佳方式是什么
- 在phonegap中为android调用onload函数的最佳方式
- 如何创建更好的方式来维护基于我的代码访问的最后一个页面
- Javascript以不同的方式声明数字
- 什么's传递对象的最佳或最常见方式'的方法作为回调
- 什么's是在前端应用程序中放置配置选项的最常见方式
- 有没有一种常见的方法可以以类似于css的方式导入javascript文件;s@导入