码迷,mamicode.com
首页 > 其他好文 > 详细

实现一个extend函数

时间:2019-09-19 00:44:01      阅读:64      评论:0      收藏:0      [点我收藏+]

标签:enum   esc   value   函数   思路   prope   fun   示例   rabl   

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()函数

 

实现一个extend函数

标签:enum   esc   value   函数   思路   prope   fun   示例   rabl   

原文地址:https://www.cnblogs.com/suihang/p/11546419.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!