zoukankan      html  css  js  c++  java
  • ECMAScript 5 新增 Object 接口

    对象构造器说明
    Object getPrototypeOf 返回对象的原型
    Object getOwnPropertyDescriptor 返回对象自有属性的属性描述符
    Object getOwnPropertyNames 返回一个数组,包括对象所有自有属性名称集合(包括不可枚举的属性)
    Object create 创建一个拥有置顶原型和若干个指定属性的对象
    Object defineProperty 给对象定义一个新属性,或者修改已有的属性,并返回
    Object defineProperties 在一个对象上添加或修改一个或者多个自有属性,并返回该对象
    Object seal 锁定对象。阻止修改现有属性的特性,并阻止添加新属性。但是可以修改已有属性的值。
    Object freeze 冻结对象,阻止对对象的一切操作。冻结对象将永远不可变。
    Object preventExtensions 让一个对象变的不可扩展,也就是永远不能再添加新的属性。
    Object isSealed 判断对象是否被锁定
    Object isFrozen 判断对象是否被冻结
    Object isExtensible 判断对象是否可以被扩展
    Object keys 返回一个由给定对象的所有可枚举自身属性的属性名组成的数组

    这些新增的好处之一是对象的属性有了更多控制,例如哪些是允许被修改的,哪些是可以枚举的,哪些是可以删除的等。这个的实现通过程序访问对象的属性描述符(property descriptors). 例如:

    var cat = {};
    
    Object.defineProperty(cat, "name", {
      value: "Maru",
      writable: false,
      enumerable: true,
      configurable: false
    });
    
    Object.defineProperty(cat, "skill", {
      value: "exploring boxes",
      writable: true,
      enumerable: true,
      configurable: true
    });

    1.getPrototypeOf 例子

    2.Object.create(proto [, propertiesObject ]) 是E5中提出的一种新的对象创建方式,第一个参数是要继承的原型,如果不是一个子函数,可以传一个null,第二个参数是对象的属性描述符,这个参数是可选的。

    例子1

    function Car (desc) {
        this.desc = desc;
        this.color = "red";
    }
     
    Car.prototype = {
        getInfo: function() {
          return 'A ' + this.color + ' ' + this.desc + '.';
        }
    };
    //instantiate object using the constructor function
    var car =  Object.create(Car.prototype);
    car.color = "blue";
    alert(car.getInfo());

    例子2

    var a = {a: 1}; 
    // a ---> Object.prototype ---> null
    
    var b = Object.create(a);
    // b ---> a ---> Object.prototype ---> null
    console.log(b.a); // 1 (继承而来)
    
    var c = Object.create(b);
    // c ---> b ---> a ---> Object.prototype ---> null
    
    var d = Object.create(null);
    // d ---> null
    console.log(d.hasOwnProperty);

    new和Object.create()的区别在哪:

    function Constructor(){}
    o = new Constructor();
    // 上面的一句就相当于:
    o = Object.create(Constructor.prototype);
  • 相关阅读:
    css3360度旋转动画
    PAT 1084 外观数列(20)(代码+思路+推荐测试用例)
    PAT 1083 是否存在相等的差(20)(代码+思路)
    PAT 1082 射击比赛(20)(代码+思路)
    PAT 1079 延迟的回文数(代码+思路)
    PAT 1078 字符串压缩与解压(20)(代码+思路)
    PAT 1077 互评成绩计算(20)(代码+思路)
    PAT 1073 多选题常见计分法(20)(代码+思路)
    PAT 1072 开学寄语(20)(代码+思路)
    PAT 1069 微博转发抽奖(20)(代码+思路+测试点4)
  • 原文地址:https://www.cnblogs.com/myzy/p/5909598.html
Copyright © 2011-2022 走看看