对象字面量的简洁方法使用注意事项
在ES6之前对象字面量中的方法是这样定义的
var o = {
x: function(){
// ..
},
y: function(){
// ..
}
}
ES6中可以
var o = {
x() {
// ..
},
y() {
// ..
}
}
但要注意在方法中执行递归或者事件绑定/解绑定时,不应该使用简洁方法。
var o = { something: function something(i){ i++; if(i<10) { return something(i); } return i; }, }
上方代码中两个something都是必要的,属性 something 使得我们能够通过 o.something(..) 来调 用,像是它的公开名称。而第二个 something 是一个词法名称,用于在其自身内部引用这 个函数,目的是用于递归。
因此不能简化为
var o = { something(i){ i++; if(i<10) { return something(i); } return i; }, }
会被解释为
var o = {
something: function(i){
i++;
if(i<10) {
return something(i);
}
return i;
},
}
return something(..)调用将找不到something标识符,因此会得到一个 ReferenceError。
简洁方法意味着匿名函数 表达式。
来源:《你不知道的JavaScript》下-2.6节