ES6函数的name属性

var person = {
  sayName() {
    console.log(this.name);
  },
  get firstName() {
    return "Nicholas";
  }
};

person.sayName.name   // "sayName"
person.firstName.name // "get firstName"

上面的代码是阮神的ES6一书中,但是我的运行结果person.firstName.nameundefined,因为person.firstName只是一个字符串而不是函数。

附上链接http://es6.ruanyifeng.com/#do...

还有,我按照ES6这种和ES5的get,set写出来的对象也有差异:

    var cart = {
          _wheels: 4,

          get wheels () {
            return this._wheels;
          },

          set wheels (value) {
            if (value < this._wheels) {
              throw new Error('数值太小了!');
            }
            this._wheels = value;
          }
        }
        var book={
            _year:4
        }
        Object.defineProperty(book,'year',{
            get:function(){
                return this._year+1
            },
            set:function(m){
                _year = m*2;
            }
        })

        console.log(cart);
        console.log(Object.keys(cart));
        console.log(Object.keys(book));

想请人帮我解答一下,谢谢了!

阅读 4k
2 个回答
person.firstName === 'Nicholas'
'Nicholas'.name === undefined
Object.getOwnPropertyDescriptor(person, 'firstName').get.name

还是基础只是不太牢固。
当我读取firstName时,已经通过getter函数转化成字符串了
person.firstName === 'Nicholas'
所以自然而然没有name属性了。

浏览器属性还是要通过Object.getOwnPropertyDescriptor()来获取
Object.getOwnPropertyDescriptor(person, 'firstName').get.name就可以正确的获取name属性了。

多谢@onioNN的解答,谢谢!

另一个问题,就是通过ES6简写的浏览器属性会被添加到可列举的属性中?

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