JavaScript OOP修复了这个范围
javascript oop with fixed this scope?
我正在尝试在javascript中实现一些基本的面向对象,如下所示:
function Cat(name) {
this.name = name;
}
Cat.prototype.sayName = function() {
console.log(this.name);
};
Cat.prototype.fetchCat = function() {
someAsyncCall()
.success(this.sayName)
.error(someOtherMethod);
};
当someAsyncCall
完成后sayName
被调用,但this
范围不是我所期望的。我可以通过绑定来解决它:
Cat.prototype.fetchCat = function() {
someAsyncCall()
.success(this.sayName.bind(this))
.error(someOtherMethod.bind(this));
};
有没有一些语法上"更好"的解决方案,而不是在回调时必须记住一直.bind
?
Cat.prototype.fetchCat = function() {
var self = this;
someAsyncCall()
.success(function(){self.sayName})
.error(someOtherMethod);
};
参考Airbnb的javascript指南行,
// bad
function() {
var self = this;
return function() {
console.log(self);
};
}
// bad
function() {
var that = this;
return function() {
console.log(that);
};
}
// good
function() {
var _this = this;
return function() {
console.log(_this);
};
}
ECMA-262 没有对下划线进行任何特殊处理,并说:
美元符号 ($( 和下划线 (_( 允许在 标识符名称。
但是由于JavaScript作为一种语言不支持开箱即用的封装,因此"_"约定旨在指示变量是"私有的"或不应在外部使用。
相关文章:
- 正在全局范围中查找JavaScript函数
- 如何通过数组更新角度子范围
- 如何使用ngrepeat和双向绑定获得指令的隔离范围
- HTML范围:动态设置值属性
- "实例范围”;TypeScript类的getter/setter
- jquery日期选择器年份范围默认值
- Jpgraph:如何手动设置X轴和Y轴的范围
- 在对象数组中查找多个值的d3范围
- 动态加载angularjs并生成控制器和范围
- 如何通过谷歌应用程序脚本从谷歌文档中的位置确定命名范围
- 在Materialize Calendar中设置年份范围
- 在MVVM视图模型中处理应用程序范围的元素
- setInterval游戏循环的范围问题
- AngularJS获取范围中的选定项目
- 从指定范围创建字符数组
- ES6是否引入了一种机制来生成块范围的函数语句(而不是表达式)
- Angularjs无法将单选按钮与嵌套范围内的模型绑定
- ngDialog-弹出窗口未更新范围变量
- JQuery AJAX 和 OOP JS 范围困境
- JavaScript OOP修复了这个范围