zoukankan      html  css  js  c++  java
  • ES6对象及ES6对象简单拓展

      ES6对象和传统的JS比较起来支持简写,比如说属性简写方法简写,还支持name属性,可以通过他迅速得到函数属性名表达式(如果是用bind方法创造的函数name属性会返回bound加上原函数的名字,Function构造函数创造的函数name属性返回“anonymous”)。

    var test = { 
        sayHi(){ 
            console.log('hi'); 
        }
    } 
    console.log(test.sayHi.name);        //sayHi    
      下面说的都是对象的拓展方法
      如果将源对象的所有可枚举属性复制到目标对象或者是为对象添加属性或者是方法那么可以使用Object.assign(),注意此方法只能复制自身属性,不可枚举的属性和继承属性都不会被复制!!!如果是重复同名属性,那么会后者覆盖前者。该函数有两个参数,第一个参数是目标对象,第二个参数是源对象。
    var a = { a : 'aa' , d : 'dd' };
    var b = { a : 'aa' , b : "b" }; 
    var add = { c : 'c' }; 
    console.log(Object.assign(add,a,b));
    //{ c: 'c', a: 'aa', d: 'dd', b: 'b' }

      关于判断对象是否可枚举可以使用Object.getOwnPropertyDescriptor()方法,这个方法是JS里面的方法。

    var test = { test : "this is test!" };
                console.log(Object.getOwnPropertyDescriptor(test,'test'));    
    /*{     value: 'this is test!',  writable: true, enumerable(表示能否通过for-in循环返回属    性): true,configurable: true }*/

      

      ES5中有三个操作会忽略enumerable为false的属性
        1.for...in循环:只遍历对象自身的和继承的课枚举的可枚举属性(不含Symbol属性)。
        2.Object.keys():返回对象自身的所有可枚举属性的键名。
        3.JSON.stringify():只串行化对象自身的可枚举属性。
      ES6新增了两个操作会忽略enumerable为false的属性,另外ES6规定所有Class的原型方法都是不可枚举的
        1.Object.assign():只复制对象自身的可枚举属性。
        2.Reflect.enumerate():返回所有的for...in循环会遍历的属性。
  • 相关阅读:
    C#修饰符
    Exploring jQuery .live() and .die()
    ASP.NET Session丢失问题原因及解决方案
    5个 PHP 安全措施(转)
    jQuery方法click() bind() live() delegate()区别
    高性能网站的十四条黄金法则(雅虎14条)
    计算机科学概论读书笔记系列——绪论
    进程、线程、应用程序域、托管代码、元数据等。
    互联网协议入门(转)
    js跨域访问问题
  • 原文地址:https://www.cnblogs.com/qiaohong/p/7705107.html
Copyright © 2011-2022 走看看