关于es6的问题

//example1
        let name = 'Anna';
        let age = 25;
        let ageField = "age";
        let obj = {
            name, 
            [ageField]:26,
            "greet me"(){
                console.log(this.name + ':' + this.age);
            }
        }
        obj["greet me"]();
//example2
        let name = 'Anna';
        let age = 25;
        let ageField = age;
        let obj = {
            name,  
            ageField:26,
            "greet me"(){
                console.log(this.name + ':' + this.age);
            }
        }
        obj["greet me"]();
//example3
        let name = 'Anna';
        let age = 25;
        let ageField = age;
        let obj = {
            name, 
            ageField,
            "greet me"(){
                console.log(this.name + ':' + this.age);
            }
        }
        obj["greet me"]();

这三个为什么只有一个能读取到正确的值,其他的都是undefined?解释一下原因。。

阅读 2.5k
1 个回答

clipboard.png


输出一下 this 其实就很清楚了

console.log(this.name + ':' + this.age, this, this === obj)

clipboard.png

clipboard.png

clipboard.png

需要注意的是:

  • [ageField]动态赋值属性名Computed Property Names),它取 ageField 变量的值 age

  • ageField属性初始化简写Property Initializer Shorthand),它其实是 ageField: ageField 的简写,因此 obj 不存在 age 属性,this.age 自然是 undefined

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题