Uruchamiam się podczas próby użycia Object.defineProperty()
na obiekcie podstawowym. Chcę dziedziczyć właściwości z tego obiektu, używając Object.create()
, a następnie zdefiniować więcej właściwości w obiekcie pochodnym (który może być dziedziczony z tego obiektu). Powinienem zauważyć, że celuję w to w node.js.Dlaczego program console.log() nie wyświetla odziedziczonych właściwości z obiektu Object.create?
Oto przykład:
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);
Która wyprowadza następujące:
{ prop1: [Getter], prop2: 'prop 2 value' }
{ prop3: 'prop 3 value' }
myślałem, że console.log() byłoby wyliczyć odziedziczone właściwości, a także właściwość prop3
że określony na obiekcie pochodnym. Wydaje się, że nie wyszukuje hierarchii prototypów dla właściwości zdefiniowanych w ten sposób. Czy to jest poprawne?
Spojrzałem na przesłonięcie metody toString()
dla mojego obiektu, ale wygląda na to, że console.log() tego nie nazywa.
- Jak mogę uzyskać dostęp do wszystkich właściwości bez konieczności ich wyliczania?
- Czy jest to ważny sposób na wdrożenie dziedziczenia?
EDIT:
- Czy istnieje inna funkcja w bibliotekach node.js', która wykona pracę i zalogować odziedziczone właściwości?
dla leniwych: http://jsfiddle.net/ aDrjA/1/ –
Na początek implementacja 'console' jest specyficzna dla przeglądarki. Naprawdę nie można polegać na tym, aby zachowywać się w ten sam sposób, z przeglądarką do przeglądarki, ponieważ każdy sprzedawca robi coś zupełnie innego z niestandardowym. Kiedy "console.log (object);" w narzędziach deweloperskich Chrome otrzymujesz rozszerzalne drzewo węzłów, które ma wszystkie posiadane metody i właściwości, a także ma łańcuch 'proto', który ma pełny pakiet dziedziczenia ... Oczekiwanie na to w każdej przeglądarce nie nastąpi - programy w niektórych przeglądarkach (WP7 IE9) ulegną awarii, jeśli zobaczą nawet "window.console", ponieważ nie mają nawet implementacji. – Norguard
*** "Należy zauważyć, że celuję w to w węźle node.js." *** –