• 《JavaScript权威指南》学习笔记——Day3


    今天看到对象这一章节,对象这一章需要理解的内容非常的多,而且比较的晦涩。在书中看到一个方法,理解透彻了,写下来再复习复习,捋一捋思路。

    /*==============================================
    *给Object.prototype添加一个不可枚举的extend()方法
    *这个方法继承调用它的对象,将作为参数传入的对象的属性一一复制
    *除了值以外,也复制属性的所有特性,除非在目标对象中有存在同名的属性
    *参数对象的所有自有对象(包括不可枚举的属性)也会一一复制
    ===============================================*/
    
    Object.defineProperty ( Object.prototype,
        "extend",  // 添加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; 
                    // 获取o中的属性的描述符
                    var desc = Object.getOwnPropertyDescriptor( o , names[i] );
                    // 用它给this创建一个属性
                    Object.defineProperty( this, names[i], desc );
                }
            }
        }
    );                     

    值得一提的是Object.getOwnPropertyNames()和Object.keys()的区别在于:前者可以获得不可枚举的属性,而后者不可以。

  • 相关阅读:
    1035: 相同生日
    1034: 7, 还是7
    1033: 青蛙的约会
    1032: 蛇行矩阵
    1031: 最少钱币数
    1030: 到底买不买
    1029: 挖掘机技术哪家强
    scikit-learn 和pandas 基于windows单机机器学习环境的搭建
    用scikit-learn和pandas学习线性回归
    SimRank协同过滤推荐算法
  • 原文地址:https://www.cnblogs.com/luohaoran/p/5933742.html
Copyright © 2020-2023  润新知