Từ khóa "get" trước một hàm trong một lớp là gì?


105

Những gì hiện getcó nghĩa là trong lớp ES6 này? Làm cách nào để tham chiếu chức năng này? Tôi nên sử dụng nó như thế nào?

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

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

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

5
Nó rất có thể chỉ là một getter nhưng bên trong một lớp thay vì một đối tượng. Nó không thực sự dành riêng cho ES6.
user4642212

@Xufox làm thế nào bạn có nghĩa là nó không phải là ES6 cụ thể?
Keith Nicholas

1
@KeithNicholas: Nó cũng hoạt động trong ES5.
Bergi

@KeithNicholas Getters tồn tại kể từ ES5, tôi nghĩ vậy. Điều duy nhất là ES6 ở đây là classcú pháp, nhưng getters không có gì mới.
user4642212

Câu trả lời:


108

Nó có nghĩa là hàm là một getter cho một thuộc tính.

Để sử dụng nó, chỉ cần sử dụng tên của nó như bạn làm với bất kỳ thuộc tính nào khác:

'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
Các lớp được ngầm định trong chế độ nghiêm ngặt btw. ecma-international.org/ecma-262/6.0/#sec-strict-mode-code
Kit Sunde

1
@KitSunde - ít nhất là trên trình duyệt của tôi (Chrome, Win7), nếu không có câu lệnh đó, tôi sẽ gặp lỗi bảng điều khiển thay vì mẫu hoạt động. Và đây không phải là một phần của "Câu trả lời", giống như nút "Chạy đoạn mã".
Amit

4
Bạn có thể không chỉ gọi p. calcArea? nếu không, tai sao không?
ksav

9
Có phải các từ khóa get / set chỉ là đường cú pháp - vì lệnh gọi đến Polygon.calcArea () cũng hoạt động như một getter?
Craig O. Curtis

vậy gettừ khóa hàm get không thể có tham số?
jay1234

46

Tóm lược:

Các gettừ khóa sẽ ràng buộc một tài sản đối tượng để một hàm. Khi thuộc tính này được tra cứu, bây giờ hàm getter được gọi. Giá trị trả về của hàm getter sau đó xác định thuộc tính nào được trả về.

Thí dụ:

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
Thích cho ví dụ thực tế!
Niket Pathak

8
Tôi nghĩ rằng tôi có thể đơn giản hóa nó hơn nữa. 'Get' cho phép bạn xử lý một phương thức lớp, như thể nó là một thuộc tính đơn giản trong một đối tượng. Nếu bạn rời khỏi 'get', bạn vẫn có thể truy cập vào các giá trị bằng cách gọi .area () thay vì chỉ .area
dwilbank

21

Nó là getter, giống như Đối tượng và Lớp trong OO JavaScript. Từ Tài liệu MDN cho get:

Các getcú pháp liên kết với một tài sản đối tượng để một hàm sẽ được gọi khi tài sản đó được nhìn lên.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.