zoukankan      html  css  js  c++  java
  • 《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()的区别在于:前者可以获得不可枚举的属性,而后者不可以。

  • 相关阅读:
    Bzoj 3907: 网格
    [***]HZOJ 哪一天她能重回我身边
    HZOJ 那一天她离我而去
    HZOJ 那一天我们许下约定
    卡特兰数表
    组合数表
    [***]HZOJ 超级树
    HZOJ 砍树
    HZOJ 星际旅行
    「BZOJ2510」弱题
  • 原文地址:https://www.cnblogs.com/luohaoran/p/5933742.html
Copyright © 2011-2022 走看看