Object.create && new Obect()

对应有道云笔记地址(有道云上排版更优):http://note.youdao.com/noteshare?id=2f123815de0b1f7b3ad19c2e796f0dcc&sub=47A5F1A8C7D5432B9E08A39A75E8098F

创建对象之new Object()和Object.create()


new Object()
  该方法创建一个新对象,使用新传入的对象作为新对象
eg:
  var a = new Object({name:1});
  a //{name:1}

 

Object.create()


  Object.create(null) 创建的对象是一个空对象,在该对象上没有继承 Object.prototype 原型链上的属性或者方法,例如:toString(), hasOwnProperty()等方法
  Object.create()方法接受两个参数:Object.create(obj,propertiesObject) ;
  obj:一个对象,是新创建的对象的原型。
  propertiesObject:可选。该参数对象是一组属性与值,该对象的属性名称将是新创建的对象的属性名称,值是属性描述符(这些属性描述符的结构与Object.defineProperties()的第二个参数一样)。注意:该参数对象不能是 undefined,另外只有该对象中自身拥有的可枚举的属性才有效,也就是说该对象的原型链上属性是无效的。
eg:
  var o = Object.create(Object.prototype, {
    // foo会成为所创建对象的数据属性
    foo: {
      writable:true,
      configurable:true,
      value: "hello"
    },
    // bar会成为所创建对象的访问器属性
    bar: {
      configurable: false,
      get: function() { return 10 },
      set: function(value) {
      console.log("Setting `o.bar` to", value);
    }
  }
});
console.log(o);//{foo:'hello'}
var test1 = Object.create(null) ;
console.log(test1);// {} No Properties


注意:
var test1 = {};
var test2 = new Object();
var test3 = Object.create(Object.prototype);
var test4 = Object.create(null);//console.log(test4.__proto__)=>undefined 没有继承原型属性和方法
console.log(test1.__proto__ === test2.__proto__);//true
console.log(test1.__proto__ === test3.__proto__);//true
console.log(test2.__proto__ === test3.__proto__);//true
console.log(test1.__proto__ === test4.__proto__);//false
console.log(test2.__proto__ === test4.__proto__);//false
console.log(test3.__proto__ === test4.__proto__);//false

posted @ 2018-10-09 16:54  鳯訡  阅读(170)  评论(0编辑  收藏  举报