Bir sınıftaki bir işlevden önceki "get" anahtar sözcüğü nedir?


110

getBu ES6 sınıfında ne anlama geliyor? Bu işleve nasıl referansta bulunabilirim? Nasıl kullanmalıyım?

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

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

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

5
Büyük olasılıkla bir alıcıdır, ancak bir nesne yerine bir sınıfın içinde. Gerçekten ES6'ya özgü değil.
user4642212

@Xufox ES6'ya özel olmadığını nasıl kastediyorsunuz?
Keith Nicholas

1
@KeithNicholas: ES5'te de aynı şekilde çalıştı.
Bergi

@KeithNicholas Getters ES5'ten beri var bence. Burada ES6 olan tek şey classsözdizimidir, ancak alıcılar yeni bir şey değildir.
user4642212

Yanıtlar:


114

Bu, işlevin bir mülk için alıcı olduğu anlamına gelir.

Kullanmak için, diğer mülklerde olduğu gibi adını kullanın:

'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
Sınıflar dolaylı olarak katı moddadır btw. ecma-international.org/ecma-262/6.0/#sec-strict-mode-code
Kit Sunde

1
@KitSunde - en azından tarayıcımda (Chrome, Win7), bu ifade olmadan çalışma örneği yerine konsol hataları alıyorum. Ve bu, "Kod parçacığını çalıştır" düğmesinin olmadığı gibi "Yanıt" ın bir parçası değildir.
Amit

4
Sadece arayamaz p. calcAreamısın? değilse neden olmasın?
ksav

9
Polygon.calcArea () çağrısı aynı zamanda bir alıcı görevi göreceğinden, get / set anahtar kelimeleri sadece sözdizimsel şeker midir?
Craig O. Curtis

yani işlev get getanahtar sözcüğü parametresine sahip olamaz?
jay1234

48

Özet:

getAnahtar kelime bir işleve bir nesne özelliği bağlayacaktır. Bu özellik arandığında şimdi alıcı işlevi çağrılır. Alıcı işlevinin dönüş değeri daha sonra hangi özelliğin döndürüleceğini belirler.

Misal:

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
Pratik örnek için parmaklarınızı kaldırın!
Niket Pathak

8
Sanırım bunu daha da basitleştirebilirim. 'Get', bir sınıf yöntemini bir nesnedeki basit bir özellikmiş gibi ele almanızı sağlar. '
Al'ı bırakırsanız

21

OO JavaScript'teki Nesneler ve Sınıflar ile aynı alıcıdır. MDN Dokümanlarından get:

getSözdizimi bu özellik aranır çağrılacak bir işleve bir nesne özelliği bağlar.


0

veya daha basit bir şekilde, "()" kullanıcısına gerek kalmadan yalnızca işlev adını yazarak işlevi çağırmanın

yukarıdaki iki işlev person.fullName () ve person.fullName için eşit önemdedir.

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);

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.