2017-01-03 41 views
9

Ben ES6 böyle ok işlevleri ve sınıfları olarak ES5 içinde this anahtar kelime ile var olan sorunların çoğunu çözmüş biliyoruz.Neden ES6 sınıfında "bu" örtük değil?

Sorum bir ES6 sınıf bağlamında this kullanımı ile ilgilidir ve açıkça yazılacak o neden. Aslında bir Java geliştiricisiydim ve aşağıdaki kod satırlarının tamamen doğal olduğu bir dünyadan geliyorum. Bu yöntem kapsamında tanımlandığı adı myName yerel bir değişken olmadığı sürece

class Person { 
    private String myName; 

    public Person() { 
    myName = "Heisenberg"; 
    } 

    public void sayMyName() { 
    System.out.println("My name is " + myName); 
    } 
} 

derleyici zaman, alan myName değerine başvuracaktır.

Ancak, bir kez biz ES6 için bu kodu dönüştürmek:

class Person { 

    constructor() { 
    this.myName = "Heisenberg"; 
    } 

    sayMyName() { 
    console.log(`My name is ${myName}`); 
    } 
} 

Bu işe yaramaz ve bir Uncaught ReferenceError: myName is not defined atar. Bunu düzeltmek için tek yol açık this referans atmak etmektir: ES6 sınıfları senin alanları yapıcı dışında tanımlanmasına izin vermez çünkü

console.log(`My name is ${this.myName}`) 

Kurucuda this ihtiyacını anlıyorum ama sayMyName

+1

Yani temelde soruyorsun? "Javascript" içindeki "java" nın programlama dili Java ile ilgisi olmadığını unutmayın. – luk2302

+2

@ luk2302 - Dillerin temelde hiçbir ilişkisi olmadığını söylediyseniz, bu doğrudur. Ama "javascript" deki "java" nın Java programlama dili ile ilgisi olmadığını söylediğinizde, hızlı bir google aramasıyla doğrulayabileceğinizden yanlıştır. wikipedia From: "... ** ** Güneş'ten bir marka lisansı aldıktan sonra, ad JavaScript kabul edilmiştir ** Bu Java etrafında ardından ** çok popüler olmak, biraz zaman bir pazarlama hareket oldu" –

+2

Değil sadece farklı dilleri değil aynı zamanda farklı kavramları karşılaştırıyorsunuz. _ "Kurucuda buna olan ihtiyacı anlıyorum" _ Kurucu işlevi neden farklı şekilde ele alınmalıdır? – zeroflagL

cevap

5

durumunda Belki doğrudan cevap vermez olabilir Java derleyicilerinde olarak aynı şeyi neden JavaScript motorları olamaz (ya olmaz, çünkü standart) anlıyorum, ama ben yok JS class anahtar sözcüğü hakkında düşünmeniz gereken yolu yönlendirmeyi deneyeceğim. Örtü altında

bu konuda hiçbir sihirli yoktur. Temel olarak, JavaScript'in başlangıcından beri olan prototip kalıtım üzerinde bir sözdizimsel şekerdir. here ve here tıklayın

JS sınıfları hakkında daha fazla bilgi edinmek için.

this yazımına neden ihtiyaç duyduğunuzdan dolayı, JS'de her zaman içeriğe duyarlı olduğundan, tam olarak nesneye başvurmanız gerekir. Oku more. İki çoğunlukla tamamen farklı diller farklı davranan neden