2012-04-28 19 views
5

Javascript ile ve özellikle OOP deseniyle başlıyorum.javascript'te Geters and setters

Soruma basit. Bir dizide, parametre ve özel sınıf değişkeni için aynı adı tutmanın bir yolu var mı? Her yere baktım ama bunu söyleyen birini bulamadım, sadece farklı var isimleri olan örnekler. Kodumla çok seçiciyim ve iki farklı isim vermek zorundayım.

parametre val ama özelliği aslında değerdir setter bakınız http://ejohn.org/blog/javascript-getters-and-setters/

function Field(val){ 
    this.value = val; 
} 
Field.prototype = { 
    get value(){ 
     return this._value; 
    }, 
    set value(val){ 
     this._value = val; 
    } 
}; 

den örnek olabilir almak. Javascript olduğu için basitçe bunu yapamam.value = değer çünkü "bu" onu halka yapar. değer = değer, hem parametreye (hem çok tuhaf olur) karşılık gelirdi. Bunu yapmanın hiçbir yolu yok mu? Değilse, bu durum için "en iyi uygulama" var mı? Sanırım alt çizgi geçerli olabilir ama ben sadece seçici değilim, sadece başka bir yol olmadığından emin olmak istiyorum.

Teşekkür ederiz!

cevap

5

Değişkeni gizlemek için kapatmayı kullanabilirsiniz. yalnızca bu kurucu (fonksiyonu) kapsama gibi yapıcı MyClass tamamlandıktan sonra

function MyClass { 
    var value; 

    this.getValue = function() { 
    return value; 
    } 

    this.setValue = function(val) { 
    value = val; 
    } 

} 

, value alan unacessible olup. Yani value'un özel bir alan olduğunu söyleyebiliriz. Ancak bu yöntemler de getValue() ve setValue() inşa nesneden kamuya açık olup, böylece yine value manipüle, MyClass değişken kapsamına referans tutun.

+0

Prototipler güzel ve hızlıdır. –

+0

Kapanışlar çok ilginç, teşekkürler! Yine de, soru, parametre ve sınıf varışı için ayarlayıcıdaki aynı değişken adını kullanmakla ilgiliydi, ancak sizde örneğin farklı olanları kullanmak zorundasınız. Her ikisi için de aynı adı kullanmak için bir yol için kilitliyorum. Java'da olduğu gibi bir şey değişkeni değişken olabilir (her ikisi de değişken olarak adlandırılır, ancak ilk önce sınıf değişkeni ve ikinci paragraf – yowie

+0

@AlexWayne Sure ile ilgilidir, ancak "gizli" değişkeni bildiremezsiniz. prototip ... burada, bir kurucu, işlev bittikten sonra bellekte kalan değişken bir kapsamı olan bir işlevdir. Bir prototip sadece bir nesnedir.Ayrıca, prototipler nasıl hızlıdır? zaman değil – Imp

1

kullanma kapanışları:

(function(exports){ 

    exports.field = {}; 
    var _value = '123'; 

    exports.field.get = function(){ 
     return _value; 
    } 

    exports.field.set = function(val){ 
     _value = val; 
    } 

})(window); 

console.log(field.get()); 

İşte closures in JS üzerinde iyi bir öğretici olduğunu.