Object.create()
Object.create(null) 创建的对象是一个空对象,在该对象上没有继承 Object.prototype 原型链上的属性或者方法,例如:toString(), hasOwnProperty()等方法;
Object.create()方法接受两个参数:Object.create(obj,propertiesObject) ;
obj:一个对象,应该是新创建的对象的原型。
propertiesObject:可选。该参数对象是一组属性与值,该对象的属性名称将是新创建的对象的属性名称,值是属性描述符(这些属性描述符的结构与Object.defineProperties()的第二个参数一样)。注意:该参数对象不能是 undefined,另外只有该对象中自身拥有的可枚举的属性才有效,也就是说该对象的原型链上属性是无效的。
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 因为在bar中设置了configurable 使用set,get方法默认都是不起作用,所以bar值无法赋值或者获取这里的o对象继承了 Object.prototype Object上的原型方法我们可以 对象的 __proto__属性,来获取对象原型链上的方法 如:console.log(o.__proto__);//{__defineGetter__: ƒ, __defineSetter__: ƒ, hasOwnProperty: ƒ, __lookupGetter__: ƒ, __lookupSetter__: ƒ, …}console.log(test1.__proto__);//undefined
通过打印发现, 将{}点开,显示的是 No Properties ,也就是在对象本身不存在属性跟方法,原型链上也不存在属性和方法
new Object和{ }
{ }是javascript对象字面量创建的形式,其本质和new Object()并无区别,默认都是继承了Object对象上的prototype
博客介绍了JavaScript中Object.create()方法,用Object.create(null)创建的对象无Object.prototype原型链属性和方法。该方法接受两个参数,对参数含义做了说明。还提到{}和new Object本质相同,默认继承Object对象的prototype。
1648

被折叠的 条评论
为什么被折叠?



