为什么Javascript调用方法与调用getter / setter方法不同

时间:2017-09-27 08:16:27

标签: javascript

例如,这是一段代码

let myQuestion = {
  _greeting: 'Hello',
  
  sayHello() {
    console.log(this._greeting);
  },
  
  get sayHelloWithGet() {
    console.log(this._greeting);
  }
};

myQuestion.sayHello();
myQuestion.sayHelloWithGet;

他们两个都做了同样的事情,他们都被称为方法,但为什么不同的用法?

1 个答案:

答案 0 :(得分:2)

  

......他们俩都被称为方法......

通常不会。通常,getter和setter被称为getter和setter,或统称为“accessors”(但是,有时候是“accessor方法”)。

  

...但为什么不同用法?

因为这就是重点:有时你在使用点需要那些不同的语义,即使它在封面下运行一个函数,它看起来像一个简单的属性访问。方法是动词,非方法属性是名词。

(当然,当将函数调用伪装成属性访问时,程序员有责任确保读取属性的成本很低。)

模糊相关:具有访问器的属性也包含在各种序列化中,而引用函数的属性通常不包括在内。例如:

var o = {
  get foo() {
    return 42;
  },
  bar() {
    return 67;
  }
};
console.log(JSON.stringify(o));