#头条创作挑战赛#
前端小白Earl笔记
new创建一个用户定义的对象类型的实例或具有构造函数的内置对象的实例。new Object()通过构造函数创建对象,或者链接该对象(即设置该对象的构造函数)到另一个对象。new Object()与javascript对象字面量创建的形式{}有许多相同之处:创建一个对象,添加的属性是在自身实例下;新创建对象的原型继承了Object 原型链上(Object.prototype)……
Object.create()用于创建一个新对象,使用现有的对象来作为新创建对象的原型(prototype)。
Object.create(proto,propertiesObject)
参数proto是必须的,是新创建对象的原型对象,即传入的该参数会被赋值到新创建对象的原型(prototype);该参数可以为null或者除基本类型包装对象以外的对象。
第二个参数propertiesObject则是可选的。传入的该参数的自有可枚举属性(其自身定义的属性,而不是其原型链上的枚举属性)将为新创建对象添加指定的属性值和对应的属性描述符。
从以上介绍可以看出,Object.create()与new Object()第一个区别就是所创建对象继承的原型不同:new Object()的原型继承内置对象Object;而Object.create()的原型则是继承指定对象,新创建对象本身并没有直接继承Object.prototype 的属性和方法。当Object.create()的必传参数proto为null时,则会创建以null为原型的对象,没有继承Object.prototype 的任何对象方法。
而由于Object.create()与new Object()创建对象的方式不同,添加的属性也就有所不同:
new Object() 通过构造函数来创建对象,添加的属性是在自身实例下;Object.create()则可以理解为继承对象,添加的属性是在原型下,如果没有传入可选参数propertiesObject则创建空对象{}。而如果要在所创建的对象中添加属性,则需要传入参数propertiesObject,即Object.create(proto,propertiesObject)。需要注意的是,由参数propertiesObject传入的属性,属性特性默认为false,在未声明属性特性的情况下,该属性是不可写,不可枚举,不可配置的。
var a = {x:1} // {x:1}
var b = new Object({x:1}) // {x:1}
b.x // 1
var c = Object.create({x:1}) // { }
c.__proto__ // {x:1}
c.x // 1
页面更新:2024-04-28
本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828
© CopyRight 2008-2024 All Rights Reserved. Powered By bs178.com 闽ICP备11008920号-3
闽公网安备35020302034844号