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

  • 相关阅读:
    Educational Codeforces Round 104 (Rated for Div. 2) A B C D E
    Codeforces Round #701 (Div. 2) A B C D
    Codeforces Round #700 (Div. 2) A B C D1
    记录一次Boot整合Batch框架无法连接达梦数据库的问题
    关于Java中的volatile关键字的总结,适合了解不太多的人
    写个日志切面追踪,可以更直接查看项目执行的各种信息打印。
    sqlServer实现group by 之后 聚合操作之拼接结果
    SQL CURSOR 游标
    SQL case when
    Redis版本
  • 原文地址:https://www.cnblogs.com/zhengming2016/p/6718932.html
Copyright © 2011-2022 走看看