Javascript Object.create 用法详解
【摘要】 在 JavaScript 中,Object.create() 是一个静态方法,它创建一个新对象,使用现有的对象来提供新创建的对象的 __proto__。换句话说,它允许你创建一个对象,该对象继承自另一个对象的属性和方法。 Object.create 详解 语法Object.create(proto[, propertiesObject])proto:新创建对象的原型对象。properties...
在 JavaScript 中,Object.create()
是一个静态方法,它创建一个新对象,使用现有的对象来提供新创建的对象的 __proto__
。换句话说,它允许你创建一个对象,该对象继承自另一个对象的属性和方法。
Object.create
详解
语法
Object.create(proto[, propertiesObject])
proto
:新创建对象的原型对象。propertiesObject
(可选):可选属性描述符,这些属性描述符将被添加到新创建的对象中。
返回值
一个新对象,其原型(即内部 [[Prototype]]
属性)由参数 proto
提供。如果参数 proto
不是对象或者为 null
,则新创建的对象将不会有原型(即它将不会继承任何属性和方法)。在 ES5 规范中,如果参数 proto
是 undefined
或 null
,则新对象的原型会被设置为 Object.prototype
的原型,但这是一个已废弃的行为,并且在 ES6 及以后的版本中,如果 proto
是 null
或 undefined
,将会抛出一个 TypeError
。
特性
- 原型继承:
Object.create()
允许你创建一个对象,该对象继承自指定的原型对象。 - 属性定义:通过第二个参数,你可以在新对象上定义属性,并指定这些属性的特性(如可枚举性、可配置性、可写性等)。
- 减少全局命名空间污染:使用
Object.create()
而不是直接通过字面量创建对象,可以减少全局命名空间中的对象数量,因为你可以创建一个具有特定原型的对象,而不需要将属性添加到全局对象(如Object.prototype
)上。
示例
// 创建一个原型对象
const person = {
isHuman: false,
printIntroduction: function() {
console.log(`My name is ${this.name}. Am I human? ${this.isHuman}`);
}
};
// 创建一个新对象,其原型是 person
const me = Object.create(person);
// "name" 和 "isHuman" 是 me 的属性
me.name = 'John'; // "name" 是 me 的属性,而不是 person 的属性
me.isHuman = true; // 改变 me 的 isHuman 属性,不会影响到 person
me.printIntroduction();
// 输出: "My name is John. Am I human? true"
// 由于 person 没有 "name" 属性,所以访问 person.name 会返回 undefined
console.log(person.name); // 输出: undefined
在这个例子中,me
是通过 Object.create(person)
创建的,它继承了 person
的属性和方法。但是,me
有自己的 name
和 isHuman
属性,这些属性与 person
的属性是分开的。
使用属性描述符
你还可以使用属性描述符来定义新对象的属性:
const newPerson = Object.create(person, {
name: {
value: 'Jane',
writable: false,
enumerable: true,
configurable: true
}
});
console.log(newPerson.name); // 输出: Jane
newPerson.name = 'Doe'; // 尝试修改 name 属性,但由于 writable: false,所以这里会静默失败(严格模式下会抛出错误)
console.log(newPerson.name); // 仍然输出: Jane
在这个例子中,newPerson
的 name
属性被设置为不可写(writable: false
),因此尝试修改它的值会失败。
注意事项
- 使用
Object.create()
时,请确保提供的原型对象(proto
)是有效的对象,否则将会抛出TypeError
。 - 在 ES5 及以后的版本中,
Object.create()
是创建具有指定原型的新对象的标准方法。在 ES5 之前,你需要使用其他方法(如构造函数或__proto__
属性)来实现类似的功能。 - 当你使用
Object.create()
创建对象时,请考虑属性的可枚举性、可配置性和可写性,以确保你的对象符合预期的行为。
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)