2016-03-18 16 views
1

Lassen Sie sagen, ich thoses zwei Objekte für Wich haben i-Descriptor auf jeder Requisiten gesetzt:Javascript: Wie definiere ich den Objekt-Deskriptor von Originalobjekten nach dem Mischen?

var readonly = { 
    libName: _libName, 
    libVersion: _libVersion, 
    createStage: _createStage, 
    renderer: _renderer 
}; 
Object.keys(readonly).forEach(function (prop) { 
    Object.defineProperty(readonly, prop, { 
     writable: false 

    }); 
}); 

und

var writable = { 
    rendererOptions: _rendererOptions 
}; 

Object.keys(writable).forEach(function (prop) { 
    Object.defineProperty(writable, prop, { 
     writable: false 
    }); 
}); 

Ich möchte dann die zwei Objekt mit assign verschmelzen, aber der Deskriptor nicht gehalten werden . Ich weiß nicht, ob es normal ist, wie ein drittes Objekt erstellt wird. Wenn ja, wie könnte ich daran arbeiten, den Deskriptor zu behalten? Hier ist, was ich erhalte (dies ist nur ein Beispiel BTW):

console.log(Object.getOwnPropertyDescriptor(writable, "rendererOptions")); 
//gives Object {value: Object, writable: false, enumerable: true, configurable: true} 

var o = Object.assign(readonly, writable); 

console.log(Object.getOwnPropertyDescriptor(o, "rendererOptions")); 
//gives Object {value: Object, writable: true, enumerable: true, configurable: true} 

Vielen Dank für jede Hilfe, die Sie geben können. Und wenn Sie eine bessere Lösung haben, bin ich dafür.

+2

Scheint, Sie suchen nach etwas wie das 'completeAssign' Beispiel unter MDN Artikel auf [' Object.assign'] (https: // developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign#Copying_accessors). Der Artikel sollte Ihnen auch helfen, das Verhalten zu erklären, das Sie aus dem obigen Code sehen. –

+1

"* ein drittes Objekt ist erstellt *" - nein. 'o === readonly'. – Bergi

+0

Ich glaube, was Sie eigentlich wollen, ist 'var o = Object.freeze (Object.assign ({}, readonly, beschreibbar))' – Bergi

Antwort

0

Hier ist mein Kommentar als Antwort:

Scheint, wie Sie sich für so etwas wie das completeAssign Beispiel unter MDN Artikel über Object.assign suchen. Der Artikel sollte auch helfen, das Verhalten, das Sie aus dem obigen Code sehen, zu erklären