Object.create() API 理解
简单来讲,就是创建一个新的对象,而且使用第一个参数作为新对象__proto__
的值。
语法
Object.create(proto: {}, propertiesObject: {}): {}
-
proto
参数新创建对象
__proto__
的值,是一个对象或者null
。 -
propertiesObject
参数与
Object.defineProperties(obj, props)
的第二个参数一致。 表示要定义其可枚举属性或修改的属性描述符的对象。{ 属性1: { value: 1, 描述符2: 值2, }, ... }
其中描述符包括以下几种:
configurable
为true
时才能修改此属性的描述符(也就是这几个配置)enumerable
为true
时该属性才会出现在对象的枚举属性中value
该属性的值writable
为true
时才能修改此属性的valueget
访问该属性时会调用此函数set
属性值被修改时会调用此函数
-
返回值是一个新对象,带着指定的原型对象和属性。
实践
最简单的用法:
可以看到obj
是一个空对象。
它的__proto__
是我们传入的{a:1}
。
原型链顶端是Object
的原型属性。
const obj = Object.create({ a: 1 });
// obj
// {}
// __proto__:
// a: 1
// __proto__:
// constructor: ƒ Object()
// hasOwnProperty: ƒ hasOwnProperty()
// isPrototypeOf: ƒ isPrototypeOf()
// propertyIsEnumerable: ƒ propertyIsEnumerable()
// toLocaleString: ƒ toLocaleString()
// toString: ƒ toString()
// valueOf: ƒ valueOf()
// __defineGetter__: ƒ __defineGetter__()
// __defineSetter__: ƒ __defineSetter__()
// __lookupGetter__: ƒ __lookupGetter__()
// __lookupSetter__: ƒ __lookupSetter__()
// get __proto__: ƒ __proto__()
// set __proto__: ƒ __proto__()
假如我们用传统的声明对象方式:
可以看到obj2
是{a:1}
。
它的__proto__
是是Object
的原型属性。
const obj2 = {a: 1};
// obj2
// {a: 1}
// a: 1
// __proto__:
// constructor: ƒ Object()
// ...
// get __proto__: ƒ __proto__()
// set __proto__: ƒ __proto__()
Object
的原型属性如下:
Object.prototype
// constructor: ƒ Object()
// hasOwnProperty: ƒ hasOwnProperty()
// isPrototypeOf: ƒ isPrototypeOf()
// propertyIsEnumerable: ƒ propertyIsEnumerable()
// toLocaleString: ƒ toLocaleString()
// toString: ƒ toString()
// valueOf: ƒ valueOf()
// __defineGetter__: ƒ __defineGetter__()
// __defineSetter__: ƒ __defineSetter__()
// __lookupGetter__: ƒ __lookupGetter__()
// __lookupSetter__: ƒ __lookupSetter__()
// get __proto__: ƒ __proto__()
// set __proto__: ƒ __proto__()
所以Object.create()
方式创建对象就相当于
// const obj2 = {a: 1};
// 等同于
const obj2 = Object.create(Object.prototype, {
a: {
writable: true,
configurable: true,
value: 1,
enumerable: true,
}
});
创建一个原型为null
的空对象
可以看到obj3
没有任何属性。
const obj3 = Object.create(null);
// {}
// No properties
The End. Last updated by Jimmy Gu, 11:50am, Jan 2021.
常见问题FAQ
- 免费下载或者VIP会员专享资源能否直接商用?
- 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
- 提示下载完但解压或打开不了?
- 找不到素材资源介绍文章里的示例图片?
- 模板不会安装或需要功能定制以及二次开发?
发表评论
还没有评论,快来抢沙发吧!