zoukankan      html  css  js  c++  java
  • ES5 Object.create 方法

    Object.create(proto[, propertiesObject])
    The Object.create() method creates a new object with the specified prototype object and properties.
    第1个参数是该对象的 prototype, 第2个参数和 Object.defineProperties 第2个参数类似

    var o;
    
    // create an object with null as prototype
    o = Object.create(null);
    
    
    o = {};
    // is equivalent to:
    o = Object.create(Object.prototype);
    
    function Constructor() {}
    o = new Constructor();
    // is equivalent to:
    o = Object.create(Constructor.prototype);
    // Of course, if there is actual initialization code
    // in the Constructor function, 
    // the Object.create() cannot reflect it
    
    
    // Example where we create an object with a couple of
    // sample properties. (Note that the second parameter
    // maps keys to *property descriptors*.)
    o = Object.create(Object.prototype, {
      // foo is a regular 'value property'
      foo: {
        writable: true,
        configurable: true,
        value: 'hello'
      },
      // bar is a getter-and-setter (accessor) property
      bar: {
        configurable: false,
        get: function() { return 10; },
        set: function(value) {
          console.log('Setting `o.bar` to', value);
        }
    /* with ES5 Accessors our code can look like this
        get function() { return 10; },
        set function(value) {
          console.log('Setting `o.bar` to', value);
        } */
      }
    });
    
    
    // Create a new object whose prototype is a new, empty
    // object and add a single property 'p', with value 42.
    o = Object.create({}, { p: { value: 42 } });
    
    // by default properties ARE NOT writable,
    // enumerable or configurable:
    o.p = 24;
    o.p;
    // 42
    
    o.q = 12;
    for (var prop in o) {
      console.log(prop);
    }
    // 'q'
    
    delete o.p;
    // false
    
    // to specify an ES3 property
    o2 = Object.create({}, {
      p: {
        value: 42,
        writable: true,
        enumerable: true,
        configurable: true
      }
    });

    Polyfill

    if (typeof Object.create != 'function') {
      Object.create = (function(undefined) {
        var Temp = function() {};
        return function (prototype, propertiesObject) {
          if(prototype !== Object(prototype)) {
            throw TypeError(
              'Argument must be an object, or null'
            );
          }
          Temp.prototype = prototype || {};
          var result = new Temp();
          Temp.prototype = null;
          if (propertiesObject !== undefined) {
            Object.defineProperties(result, propertiesObject); 
          } 
          
          // to imitate the case of Object.create(null)
          if(prototype === null) {
             result.__proto__ = null;
          } 
          return result;
        };
      })();
    }

    参考地址:

    https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/create

  • 相关阅读:
    Oracle函数应用与查询聚合统计
    Oracle子查询与分页查询
    DB2端口(转自百度文库http://wenku.baidu.com/view/47809b26aaea998fcc220e65.html)
    职场生涯
    git 管理多个私钥
    ubuntu 解压 windows 生成的 zip 文件乱码问题
    js实现类似于add(1)(2)(3)调用方式的方法
    webkit内核浏览器的CSS写法
    python 单例模式
    Javascript模块化编程:AMD规范及require.js用法【转】
  • 原文地址:https://www.cnblogs.com/zhengming2016/p/6718932.html
Copyright © 2011-2022 走看看