2012-11-09 12 views
6

Bir temel nesne üzerinde Object.defineProperty() kaldırarak çalışırken bir askıda koşuyorum. Bu nesneyi Object.create() kullanarak bu nesneden miras almak ve sonra türetilmiş nesnede daha fazla özellik tanımlamak istiyorum (oradan devralınabilir). Bunu node.js.'da hedeflediğime dikkat etmeliyim. kalıtsal özelliklerinin yanı sıra ben tanımlanmış özellik prop3 numaralandırma olur Neden console.log() Object.create öğesinden miras alınan özellikleri göstermiyor?

{ prop1: [Getter], prop2: 'prop 2 value' } 
{ prop3: 'prop 3 value' } 

O console.log (düşünce): Aşağıdaki verir

var Base = {}; 

Object.defineProperty(Base, 'prop1', { 
    enumerable:true, 
    get:function(){ return 'prop1 value';} 
}); 

Object.defineProperty(Base, 'prop2', { 
    enumerable:true, 
    value : 'prop 2 value' 
}); 

Object.defineProperty(Base, 'create', { 
    value:function(){ 
     return Object.create(Base); 
    } 
}); 

console.log(Base); 

var derived = Base.create(); 

Object.defineProperty(derived, 'prop3', { 
    enumerable:true, 
    value:'prop 3 value' 
}); 

console.log(derived); 

: Burada

bir örnek türetilmiş nesne üzerinde. Bu şekilde tanımlanan özellikler için prototip hiyerarşisine bakmadığı anlaşılıyor. Bu doğru mu?

Nesnem için toString() yöntemini geçersiz kılmayı inceledim, ancak console.log() buna çağrı yapmıyor gibi görünüyor.

  1. Tüm özellikleri oturum açmak zorunda kalmadan nasıl oturum açabilirim?
  2. Bu, miras uygulamak için geçerli bir yol mu?

DÜZENLEME:

  1. işi yapmak ve kalıtsal özelliklerini giriş yapacaktır node.js' kütüphanelerde başka işlevi var mı?
+1

olsa düğümünde göstermek gibi görünüyor aDrjA/1/ –

+1

Yeni başlayanlar için konsolun uygulaması tarayıcıya özeldir. Her bir satıcı standart dışı tamamen farklı bir şey yaptığından, tarayıcıya tarayıcıyla aynı şekilde davranmak için buna güvenemezsiniz. Chrome dev-tools'larında “console.log (object);”, tüm sahip olunan yöntem ve özelliklere sahip olan ve aynı zamanda tam devralma yığınına sahip olan “proto” zincirine sahip olan genişletilebilir bir düğüm ağacı elde edersiniz. ... Bunu her tarayıcıda beklemek mümkün olmayacak - bazı tarayıcılarda (WP7 IE9) programlar, window.console'ları bile göreceklerse bile çökecekler, çünkü uygulamaları bile yok. – Norguard

+1

*** "Node.js adresinde bunu hedeflediğimi belirtmeliyim." *** –

cevap

1

Kundakçı kalıtsal özelliklerini log yapar:

enter image description here

Chrome kalıtsal özelliklerini içeren bir ağaç görünümü verirken:

enter image description here

+0

@dwerner Chrome bir ağaç görünümü sağlıyor. console.log işlevi uygulamaya özgüdür. Node.js sadece kendi özelliklerini kaydetmeye karar verdi.Elbette bu, nesnenin diğer iki özelliği miras alması anlamına gelmez. –

4

kullanabilirsiniz console.dir() uygun olduğunda

console.dir(derived) 

ve __proto__ nesne

Düzen üzerinde nesnenin miras özelliklerini göstereceğiz: http://jsfiddle.net/: doesnt tembel için

+0

Ayrıca konsol.dir() teşekkürler hakkında bilmek de iyidir. Sadece __proto__'ya güvenmek istediğimden emin değilim. – dwerner

İlgili konular