对象字面量的简洁方法使用注意事项

 

在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节

posted on 2022-02-17 11:09  HHH_B  阅读(21)  评论(0编辑  收藏  举报

导航