在JavaScript对象中,访问器和普通函数有什么区别?

6
除了它们被调用的方式之外,这两个函数(一个是访问器属性的 getter)在 JavaScript 对象中有什么具体区别?
var o = {
  foo: function() { return "bar"; },
  get foo2() { return "bar2"; }
}

get foo2() { return "bar2"; } 不是有效的 JavaScript 语法。 - Uzbekjon
@Uzbekjon http://www.ecma-international.org/ecma-262/5.1/#sec-11.1.5 - melpomene
你不需要调用getter函数,它们就像属性一样运作,这意味着它们也会出现在JSON中,但普通方法则不会。 - dandavis
我的错,我还没有看过ES5,但我想现在是时候了。谢谢提醒。 - Uzbekjon
o.foo 返回一个函数回调,o.foo2 返回一个字符串。 - str
1个回答

5
MDN,有时候我们希望允许访问返回动态计算值的属性,或者想要反映内部变量的状态而不需要使用显式方法调用。在JavaScript中,可以通过使用getter实现这一目标。

方法是与一个对象相关联的函数,简单来说,方法是一个对象的属性,该属性是一个函数。方法的定义方式与普通函数的定义方式相同,只是它们必须被分配为对象的属性。

foo2更像是一个属性而不是一个方法,它可以保存动态值。

var o = {
  foo: function() {
    return "bar";
  },
  get foo2() {
    return "bar2";
  }
};
//To invoke 'foo'
console.log(o.foo());
//To invoke 'foo2'
console.log(o.foo2);


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接