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

  • buttheadgsxr1000

    buttheadgsxr

    24 Ocak 2008
  • GamingAndTech

    GamingAndTec

    16 NİSAN 2013
  • My name is Festis and I'm free

    My name is F

    2 EKİM 2011