实现一个extend函数

匿名 (未验证) 提交于 2019-12-03 00:09:02

NOW,今天让我们来实现一个extend函数。

具体思路: 使用Object.defineProperty()对属性的特性进行设置,然后通过Object.getOwnPropertyDescriptor()获取到属性描述符,并赋值给新创建的对象

下面我们把代码拉出来溜溜

    Object.defineProperty(Object.prototype,         "extend",         {             writable: true,             enumerable: false,             configurable: true,             value: function(o){                 // 获取所有的自有属性                 var names = Object.getOwnPropertyNames(o);                 for(var i =0;i< names.length;i++){                     // 如果属性已存在则跳过                     if(names[i] in this) continue;                     // 获取该属性的属性描述符ss                     var desc = Object.getOwnPropertyDescriptor(o,names[i]);                     Object.defineProperty(this,names[i],desc)                 }             }         }                 )   

使用示例:

  // 定义一个新对象     var a = {         itemA: 1     }     // 新建一个属性,并设置属性描述符     Object.defineProperty(a,"itemB",{         writable: true,         enumerable: false,         configurable: true,         value: 2     })     // 再定义一个新对象     var b = {}     b.extend(a)     // 此时我们可以看到静态属性已经继承过去了     console.log(b)  // 结果为{itemA: 1,itemB: 2}     //再来看看属性描述符是不是也过去了     let extendDesc = Object.getOwnPropertyDescriptor(b,"itemB")     console.log(extendDesc)  // 结果为{value: 2, writable: true, enumerable: false, configurable: true}

好了,结束,有机会我们一起来模拟实现一下Object.create()函数

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!