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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《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()的区别在于:前者可以获得不可枚举的属性,而后者不可以。

以上是关于《JavaScript权威指南》学习笔记——Day3的主要内容,如果未能解决你的问题,请参考以下文章

javascript权威指南学习笔记2

javascript权威指南学习笔记1

javascript权威指南笔记学习

JavaScript权威指南(第6版)学习笔记一

JavaScript权威指南(第6版)学习笔记四

JavaScript权威指南(第6版)学习笔记三