SORU
16 ŞUBAT 2010, Salı


`yeni fonksiyon()` JavaScript küçük harf "f" ile

İş arkadaşım kullanıyor "new fonksiyon()" bir küçük "" yeni nesneler tanımlamak için JavaScript. f ile Peki tüm büyük tarayıcılarda iş gibi görünüyor ve aynı zamanda özel değişkenler saklamakta oldukça etkili gibi görünüyor. İşte size bir örnek:

    var someObj = new function () {
        var inner = 'some value';
        this.foo = 'blah';

        this.get_inner = function () {
            return inner;
        };

        this.set_inner = function (s) {
            inner = s;
        };
    };

"Bu someObj. bir kamu malı olur" kullanılır, en kısa sürede Yani someObj.foo, someObj.() get_inner ve someObj.() set_inner genel kullanıma açık hepsi. Buna ek olarak, set_inner() ve get_inner () "" kapatmalar yüzünden. iç sahip oldukları ayrıcalıklı yöntemler,

Ancak, bu teknik için herhangi bir başvuru hiçbir yerde görmedim. Douglas Crockford bile JSLint şikayet ediyor:

  • garip bir yapı. '' . Yeni sil

Üretim bu tekniği kullanıyoruz ve iyi çalışıyor gibi görünüyor, ama her yerde belgelenen değil çünkü bu konuda biraz endişeliyim. Eğer bu geçerli bir yöntem olup olmadığını bilen var mı?

CEVAP
16 ŞUBAT 2010, Salı


Geçerli, eğer Constructor Function olsaydı gibi bir işlev ifadesi kullanarak önce bu tekniği gördüm.

Ama IMHO, otomatik çağırma işlevi ifade ile aynı elde edebilirsiniz, gerçekten bu şekilde: new operatörünü kullanarak bir yere varacağını sanmıyorum

var someObj = (function () {
    var instance = {},
        inner = 'some value';

    instance.foo = 'blah';

    instance.get_inner = function () {
        return inner;
    };

    instance.set_inner = function (s) {
        inner = s;
    };

    return instance;
})();

new operatör amacı yeni bir nesne örneği [[Prototype]] iç özelliği ayarlama oluşturmak için, bu [Construct] iç özelliği ile nasıl yapıldığını görebilirsiniz.

Yukarıdaki kodu eşdeğer bir sonuç çıkacak.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • BumbleDroid

    BumbleDroid

    18 EKİM 2010
  • expertvillage

    expertvillag

    5 NİSAN 2006
  • Ty Moss

    Ty Moss

    20 Kasım 2007