码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2016-10-06 15:06:09      阅读:204      评论:0      收藏:0      [点我收藏+]

标签:

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

/*==============================================
*给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

标签:

原文地址:http://www.cnblogs.com/luohaoran/p/5933742.html

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