zoukankan      html  css  js  c++  java
  • 【ECMAScript5】Object对象

    1. Object.create(prototype, [propertiesObject])

    使用指定的原型对象及其属性去创建一个新的对象。

    var parent = {
        x : 1,
        y : 1
    }
     
    var child = Object.create(parent,{
        z : { // z会成为创建对象的属性
            writable:true,
            configurable:true,
            value: "newAdd"
        }
    });
    console.log(child);

    2.  Object.defineProperties(obj, props)

    直接在一个对象上定义新的属性或修改现有属性,并返回该对象。

    var obj = {};
    Object.defineProperties(obj, 
    {  
       'property1': {    
           value: true,  
           writable: true 
       },  
      'property2': {   
         value: 'Hello',
         writable: false  
      }
    });
    console.log(obj); // {property1: true, property2: "Hello"}

    props有以下属性可以配置:

    • configurable:true 当且仅当该属性描述符的类型可以被改变并且该属性可以从对应对象中删除。默认为 false。
    • enumerable:true 当且仅当在枚举相应对象上的属性时该属性显现。默认为 false。
    • value:与属性关联的值。可以是任何有效的JavaScript值(数字,对象,函数等)。默认为 undefined。
    • writable:true当且仅当与该属性相关联的值可以用assignment operator改变时。默认为 false。
    • get:作为该属性的 getter 函数,如果没有 getter 则为undefined。函数返回值将被用作属性的值。默认为 undefined。
    • set:作为属性的 setter 函数,如果没有 setter 则为undefined。函数将仅接受参数赋值给该属性的新值。默认为 undefined。

    3. Object.defineProperty(obj, prop, descriptor)

    在一个对象上定义一个新属性,或者修改一个对象的现有属性, 并返回这个对象。

    Object.defineProperty(Object, 'is', 
    {
         value: function(x, y) {    
            if (x === y) { // 针对+0 不等于 -0的情况       
                  return x !== 0 || 1 / x === 1 / y;   
            }   // 针对NaN的情况    
            return x !== x && y !== y;  
         },  
         configurable: true,  
         enumerable: false,  
         writable: true 
    }); // 注意不能同时设置(writable,value) 和 get,set方法,否则浏览器会报错  
    // Invalid property descriptor.  Cannot both specify accessors and a value or writable attribute

    4. Object.keys(obj)

    返回一个由一个给定对象的自身可枚举属性组成的数组,数组中属性名的排列顺序和使用 for...in 循环遍历该对象时返回的顺序一致 (两者的主要区别是 一个 for-in 循环还会枚举其原型链上的属性)。

    var arr = ["a", "b", "c"];
    console.log(Object.keys(arr)); // ['0', '1', '2'] /* Object 对象 */
    var obj = { foo: "bar", baz: 42 }, keys = Object.keys(obj);
    console.log(keys); // ["foo","baz"]

    在ES5里,如果此方法的参数不是对象(而是一个原始值),那么它会抛出 TypeError。在ES2015中,非对象的参数将被强制转换为一个对象。

    Object.keys("foo");
    // TypeError: "foo" is not an object (ES5 code)
    
    Object.keys("foo");
    // ["0", "1", "2"]                   (ES2015 code)

    5. hasOwnProperty()

    判断对象自身属性中是否具有指定的属性

    obj.hasOwnProperty('name')

    6. Object.getOwnPropertyNames()

    返回一个由指定对象的所有自身属性的属性名(包括不可枚举属性但不包括Symbol值作为名称的属性)组成的数组。

    var obj = { 0: "a", 1: "b", 2: "c"};
     
    Object.getOwnPropertyNames(obj).forEach(function(val) {
      console.log(val);
    });
     
     
    var obj = {
        x : 1,
        y : 2
    }
     
    Object.defineProperty(obj,'z',{
        enumerable : false
    });
    console.log(Object.getOwnPropertyNames(obj)); // ["x", "y", "z"] 包含不可枚举属性 。
    console.log(Object.keys(obj)); // ["x", "y"]      只包含可枚举属性 。
  • 相关阅读:
    VMware提示此主机支持Intel VT-x,但Intel VT-x处于禁用状态怎么解决
    linux中几种安装软件 方法
    Linux向文件添加内容的几种方法
    什么是模块?模块划分的原则是什么?
    NOIP2009 t3 最优贸易
    HDU3072 Intelligence System
    洛谷P2569 股票交易
    玄学
    [0403]学习一个——苟(简单Java开发)
    实验 3:类和对象
  • 原文地址:https://www.cnblogs.com/myitnews/p/12188043.html
Copyright © 2011-2022 走看看