SORU
25 NİSAN 2010, Pazar


Kullanarak "Nesne.oluştur" yerine "yeni"

1.9.3 / ECMA 5 Javascript tanıttı Douglas Diğerleri uzun bir süre advocating olmuştur arasında Crockford Object.create,. Nasıl aşağıdaki kod Object.create new yerini?

var UserA = function(nameParam) {
    this.id = MY_GLOBAL.nextId();
    this.name = nameParam;
}
UserA.prototype.sayHello = function() {
    console.log('Hello '  this.name);
}
var bob = new UserA('bob');
bob.sayHello();

(MY_GLOBAL varsayalım.var nextİd).

Aklıma gelen en iyisidir:

var userB = {
    init: function(nameParam) {
        this.id = MY_GLOBAL.nextId();
        this.name = nameParam;
    },
    sayHello: function() {
        console.log('Hello '  this.name);
    }
};
var bob = Object.create(userB);
bob.init('Bob');
bob.sayHello();

Herhangi bir avantajı yok, ben anlamıyorum sanırım. Muhtemelen çok neo-klasik olmaya çalışıyorum. Nasıl Object.create kullanıcı oluşturmak için kullanmalı mıyım? diye bob

CEVAP
25 NİSAN 2010, Pazar


Miras sadece bir seviye ile, sizin örnek Object.create gerçek faydalarını görürsünüz.

Bu yöntem kolayca uygulamak için izin verirdiferansiyel mirasnesneleri diğer nesnelerden devralabilir.

Üzerinde userB örnek sanmıyorum o init yöntem olmalı kamu veya bile var, seni çağırır, tekrar bu yöntemi varolan bir nesne örneği, id name özellikleri değişecek.

Object.create ikinci argüman, örneğin kullanarak nesne özellikleri başlatmak sağlar:

var userB = {
  sayHello: function() {
    console.log('Hello '  this.name);
  }
};

var bob = Object.create(userB, {
  'id' : {
    value: MY_GLOBAL.nextId(),
    enumerable:true // writable:false, configurable(deletable):false by default
  },
  'name': {
    value: 'Bob',
    enumerable: true
  }
});

Gördüğünüz gibi, bu özellikler olabilir başlatıldı ikinci bağımsız değişken Object.create, değişmez bir nesne kullanarak benzer bir sözdizimi için kullanılan Object.defineProperties Object.defineProperty yöntemleri.

Gerçekten yararlı olabilecek bir özellik öznitelikleri (enumerable, writable configurable) ayarlamanızı sağlar.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Damian Winter

    Damian Winte

    27 ŞUBAT 2007
  • Derek Banas

    Derek Banas

    12 AĞUSTOS 2008
  • metallmanutza13

    metallmanutz

    13 NİSAN 2007