2017-03-19 11 views
10

JavaScriptJavascript'te (ES6) 'statik get'in anlamı nedir?

böyle bir ifadenin artık neyin anlamı
static get is() { return "custom-element"; } 

Ben static Java veya C++ benzeri bir davranış olabilir ama bu sözdizimi hakkında daha ayrıntılı bilgi mi olduğunu tahmin etmek gerekir.

+1

Genelde sözdizimi hakkında daha fazla bilgi edinmek istediğinizde, önce Google'a başvurabilirsiniz. Önce bunu yapmanı ve sonra bir şey belirsiz olup olmadığını sormayı öneririm. – 4castle

cevap

11

Siz haklısınız. Onlar

Her şey belgelenmiştir C++ ve Java gibi başka nesne yönelimli programlama dillerine hemen hemen yakın bulunmaktadır. Bu, baktığınız statik bir yöntemdir ve özellik, özellik veya almak istediğiniz Nesne için getter olur.

Eğer explore static

statik yöntemlerle bakarsak. Statik özellikler (veya sınıf özellikleri) Foo'nun kendisinin özellikleridir.

> typeof Foo.staticMethod 
'function' 
> Foo.staticMethod() 
'classy' 

Ve statik mülkiyet:

ben üstte dokümanlar verilen daha büyük bir örnek düşünemiyorum statik bir yöntem tanımını önüne, bir sınıf yöntemi oluşturmak başımın hemen şimdi. İşte önemli kısmı yapıştırıyorum.

class Point { 
    constructor(x, y) { 
     this.x = x; 
     this.y = y; 
    } 
} 

Point.ZERO = new Point(0, 0); 

Sen() salt okunur bir özellik oluşturmak, ancak bir atama sadeliği sevmeye Object.defineProperty kullanabilirsiniz.

İkinci olarak, statik bir getter oluşturabilirsiniz: Her iki durumda da

class Point { 
    constructor(x, y) { 
     this.x = x; 
     this.y = y; 
    } 
    static get ZERO() { 
     return new Point(0, 0); 
    } 
} 

, size okuyabileceği bir özellik Point.ZERO olsun. İlk durumda, aynı örnek her zaman iade edilir. İkinci durumda, her seferinde yeni bir örnek iade edilir.

+0

Bu ilk cümleye çok dikkat ederim. Sözdizimi benzerdir ve hepsi ortak olanla ilgilidir. JS'de bir 'class'' prototipli bir yapıcı işlevi için sözdizimsel şekerdir. – 4castle

+0

@ 4castle Korkuyorum. Statik özellikler (veya sınıf özellikleri) Foo'nun kendisinin özellikleridir. Bir yöntem tanımını statik ile önlerseniz, bir sınıf yöntemi oluşturursunuz: 'Bu, Java için de geçerlidir. Herhangi bir cümle ile yanlışsam beni düzelt. –

+0

Bu doğru, ancak JS'nin Java gibi davranacağını varsaymak tehlikeli. Örneğin, JS'de "statik" özellikler, orijinal işlevi genişleten işlevler tarafından devralınır, ayrıca Foo.prototype öğesinden devraldığı nesneler, Java sözdizimini kullanacakları gibi "statik" yönteme erişemeyeceklerdir. “Sınıf” sözdizimini kullanan insanların, bir şeyler yapmanın “eski moda” yolunu öğrenmek için zaman ayırmadıklarını ve sınıfları uygun olmayan yollarla kullanmayı öğrendiklerini buldum. – 4castle