27. completeAssign() を実装する
シェアしよう
少し工夫が必要 - accepted / - tried
この問題は 26. Object.assign()を実装するの続きです。
Object.assign()
が処理するのは列挙可能なプロパティで、gettersや列挙不可なプロパティは対象外。
例えば:
const source = Object.create( { a: 3 // prototype }, { b: { value: 4, enumerable: true // 列挙可能なdata descriptor }, c: { value: 5, // 枚举不可なdata descriptor }, d: { // 枚举不可なaccessor descriptor get: function() { return this._d; }, set: function(value) { this._d = value } }, e: { // 列挙可能な accessor descriptor get: function() { return this._e; }, set: function(value) { this._e = value }, enumerable: true } })
上記のobjectでObject.assign()
を使うと、こうなる。
Object.assign({}, source)// {b: 4, e: undefined}// e はundefined 、 `this._e` はundefinedから
これはほしい結果ではないかも、completeAssign()
を実装して、data descriptorsもaccessor descriptorsも対象にしてください!
もしdescriptorsがまだ詳しくない方は、こちらのMDNの文章を参照してください。
この問題は単純にdescriptorsへの理解を確認するだけです。
ご武運を!