27. completeAssign() を実装する

JavaScript

少し工夫が必要  - 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への理解を確認するだけです。

ご武運を!

常にもっといい方法を求めよう。