ECMA5 Object.create

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)
 
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

  (3)实现继承
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;





你可能感兴趣的:(Object.create,ECMA5)