Object.create(prototype,descriptors) 是E5中提出的一种新的对象创建方式。
1.参数:
prototype是要继承的原型,如果不是一个子函数,可以传一个null。
descriptors是对象的属性描述符,这个参数是可选的。数据属性是可获取可设置的属性,数据属性描述符包括value,writable,configurable和enumerable特性。如果没有指定,后三个值默认为false。访问器属性包括configurable,enumerable,get和set特性。
2.返回的值
一个以prototype为原型并且包含指定属性的新对象。
3.异常
包含以下三种情况:
(1)prototype不是对象并且不是null
(2)descriptors里面具有value和writable特性,同时还要set和get特性
(3)descriptors里面具有不是函数的set和get特性
4.示例
(1)
var newObj = Object.create(null, {
size: {
value: "large",
enumerable: true
},
shape: {
value: "round",
enumerable: true
}
});
for (var item in newObject){
console.log(item);
}
//size
//shape
(2)
(3)实现继承function Person(name){ this.name=name; } Person.prototype.showName=function(){ console.log(this.name); } var person1=Object.create(Person.prototype,{ name:{ value:"vuturn", enumerable:true, writable:true }, job:{ value:"software engineer", enumerable:true } }); person1.showName();//vuturn person1.name="John"; person1.showName();//John person1.job="doctor"; console.log(person1.job);//software engineer
function SuperType(name){ this.name=name; } SuperType.prototype.showName=function(){ console.log(this.name); } function SubType(name){ SuperType.call(this.name); } SubType.prototype=Object.create(SuperType.prototype); var person=new SubType("vuturn"); person instanceof SubType; person instanceof SuperType;