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

ご武運を!

バッグフリーで普通なコードは何より。

(37)