类中函数之前的“ get”关键字是什么?


106

get这个ES6课程是什么意思?如何引用此功能?我应该如何使用?

class Polygon {
  constructor(height, width) {
    this.height = height;
    this.width = width;
  }

  get area() {
    return this.calcArea()
  }

  calcArea() {
    return this.height * this.width;
  }
}

5
它很可能只是一个吸气剂,但在类而不是对象中。这并不是真正的ES6专用。
user4642212

@Xufox您如何表示其不是ES6专用的?
基思·尼古拉斯

1
@KeithNicholas:在ES5中也是如此。
Bergi 2015年

我认为@KeithNicholas Getters自ES5起就存在。ES6唯一的class语法是语法,但是getter并不是什么新鲜事物。
user4642212

Answers:


109

这意味着该函数是属性的获取器。

要使用它,只需像使用其他属性一样使用它的名称即可:

'use strict'
class Polygon {
  constructor(height, width) {
    this.height = height;
    this.width = width;
  }

  get area() {
    return this.calcArea()
  }

  calcArea() {
    return this.height * this.width;
  }
}

var p = new Polygon(10, 20);

alert(p.area);


2
类隐式处于严格模式btw中。ecma-international.org/ecma-262/6.0/#sec-strict-mode-code
Kit

1
@KitSunde-至少在我的浏览器(Chrome,Win7)上,没有该声明,我会收到控制台错误,而不是工作示例。这不是“答案”的一部分,就像“运行代码段”按钮不是一样。
阿米特(Amit)2015年

4
你不能只打电话p. calcArea吗?如果没有,为什么不呢?
ksav

9
由于对Polygon.calcArea()的调用也将充当吸气剂,因此get / set关键字是否只是语法糖?
Craig O. Curtis

所以功能get get关键字不能有参数?
jay1234

47

摘要:

所述get关键字将对象属性到功能结合。现在查询此属性后,将调用getter函数。然后,getter函数的返回值确定返回哪个属性。

例:

const person = {
    firstName: 'Willem',
    lastName: 'Veen',
    get fullName() {
        return `${this.firstName} ${this.lastName}`;
    }

}

console.log(person.fullName);
// When the fullname property gets looked up
// the getter function gets executed and its
// returned value will be the value of fullname


2
竖起大拇指的实际例子!
Niket Pathak

8
我想我可以进一步简化它。使用“ get”,您可以将类方法视为对象中的简单属性。如果您不使用“获取”,则仍然可以通过调用.area()而不是仅使用.area来访问该值
dwilbank '18

21

它是吸气剂,与OO JavaScript中的对象和类相同。从MDN文档中获得get

get语法将对象属性绑定到在查找该属性时将调用的函数。


0

或更简单的方法是,只需键入函数名称,就无需用户“()”即可调用函数

上面的两个函数对person.fullName()和person.fullName的关注相同

const person = {
    firstName: 'Willem',
    lastName: 'Veen',
    fullName() {
        return `${this.firstName} ${this.lastName}`;
    }

}

console.log(person.fullName());

const person = {
    firstName: 'Willem',
    lastName: 'Veen',
    get fullName() {
        return `${this.firstName} ${this.lastName}`;
    }

}

console.log(person.fullName);

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.