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への理解を確認するだけです。
ご武運を!