• 实现一个extend函数


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

     

  • 相关阅读:
    约数
    质数
    回炉重造之重读Windows核心编程-018-堆栈
    回炉重造之重读Windows核心编程-017- 内存映射文件
    换电脑遇到git的一些记录
    python3之迭代器和生成器
    python3之类和对象
    python3之错误和异常
    python3之函数
    python3之流程控制
  • 原文地址:https://www.cnblogs.com/suihang/p/11546419.html
Copyright © 2020-2023  润新知