27. 实现completeAssign()
分享给更多人
中等难度 -通过 / -执行
本题是 26. 实现Object.assign()的延续。
Object.assign()
处理的是可枚举属性,所以getters不会被复制,不可枚举属性被忽略。
假设我们有如下的object。
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.assign()
的话,我们得到的是
Object.assign({}, source)// {b: 4, e: undefined}// e 是undefined 因为 `this._e` 是undefined
这也许不是我们想要的结果,你能否实现一个completeAssign()
,使得data descriptors和 accessor descriptors都能被拷贝?
如果你还不熟悉descriptors,请参照MDN的说明。
该问题单纯地想要考考你对descriptors的理解。
祝你好运!