2016-01-20 24 views
10

Kurucuda dışardaki değişkenler arasında fark var mıdır?

İşlevler için 'bu' farklı bir şekilde bağlıdır, ancak değişkenler için, bir fark olup olmadığını anlayamıyorum. @ Merianos-nikos tarafından yorumlarındaES7 Sınıflar: Yapıcının Dışında Beyan Eden Özellikler

class Widget { 
    constructor(constructorName) { 
    this.constructorName = constructorName; 
    } 
    nonConstructorName = "nonConstructorName1"; 
} 



var myWidget = new Widget("myConstructorName1"); 

console.log(myWidget.constructorName); // "myConstructorName1" 
console.log(myWidget.nonConstructorName); // "nonConstructorName1" 

myWidget.constructorName = "myConstructorName2"; 
myWidget.nonConstructorName = "nonConstructorName2"; 

console.log(myWidget.constructorName); // "myConstructorName2" 
console.log(myWidget.nonConstructorName); // "nonConstructorName2" 

console.log(myWidget.prototype.constructorName); // "undefined" 
console.log(myWidget.prototype.nonConstructorName); // "undefined" 

console.log(myWidget.__proto__.constructorName); // "undefined" 
console.log(myWidget.__proto__.nonConstructorName); // "undefined" 

var myNewWidget = new Widget("myConstructorName3"); 

console.log(myNewWidget.nonConstructorName); // "nonConstructorName1" 
+0

** Bu referans benim senaryo var mı? ** "(kasıtlı) (yöntemlerden hariç) prototip veri özelliklerini sınıf özelliklerini veya örnek özelliğine ya tanımlamak için doğrudan bildirime yolu yoktur." http://wiki.ecmascript.org/doku.php?id=strawman:maximally_minimal_classes –

+1

Sınıf tanımının içinde tanımlayacağınız şekilde özelliklere sahip olup olmadığından emin değilim. Buna dayanarak: https://babeljs.io/docs/learn-es2015/#classes, 'constructor' yönteminin dışında bir özellik tanımının yanı sıra ES6 kodunuzu burada denerseniz: https: // babeljs. io/repl/ES6 transpeyerinin 'constructor 'yönteminin dışında özellik defnititionı için bir hata ürettiğini göreceksiniz. –

+0

Eğer sınıf inşasının dışında bazı özel mülklere sahip olmak istiyorsanız, belki de şu soruyu okumak güzeldir: http://goo.gl/qzau3o, birkaç iyi cevabı vardır. –

cevap

4

Cevap ...

"Burada yaklaşım özel verileri depolamak için, özeldir yapıcı işlevi, kapsamını kullanmaktır. Yöntemleri için Bu özel verilere erişebilmeleri için kurucular içinde oluşturulmaları gerekir, yani bunları her örnekle yeniden yaratırsınız. Bu bir performans ve hafıza cezasıdır, ancak bazıları cezanın kabul edilebilir olduğuna inanır. ”

Private properties in JavaScript ES6 classes