基本思想:
借助原型可以基于已有的对象创建新对象,同时还不必创建自定义类型。
function object(o){
function F(){}
F.prototype = o;
return new F();
}
在object()函数内部,先创建了一个临时性的构造函数,然后将传入的对象作为这个构造函数的原型,最后返回了这个临时类型的一个新实例。
var person ={
name:"Wonder",
colors:['blue','green','white']
};
var anoherPerson = Object(person);
anoherPerson.name = "Abby";
anoherPerson.colors.push('black');
var yetAnotherPerson = Object(person);
yetAnotherPerson.name = "Greg";
anoherPerson.colors.push('yellow');
alert(person.colors); //blue,green,white,black,yellow
原型式继承必须有一个对象可以作为另一个对象的基础。
ECMAScript 5新增Object.create()方法规范化了原型式继承。
/* Object.create()方法(IE9+、Firefox 4+、Safari 5+、Opera 12+和Chrome)
* param:
* param1——用作新对象原型的对象
* param2——(可选)为新对象定义额外属性的对象
* 格式:每个属性通过自己的描述符定义。
*/
var person ={
name:"Wonder",
colors:['blue','green','white']
};
var anoherPerson1 = Object.create(person);
anoherPerson1.name = "Abby";
anoherPerson1.colors.push('black');
var yetAnotherPerson = Object.create(person);
yetAnotherPerson.name = "Greg";
anoherPerson.colors.push('yellow');
alert(person.colors); //blue,green,white,black,yellow
var anoherPerson2 = Object.create(person,{
name: {
value:"Bob"
}
});
alert(anoherPerson2 .name); //"Bob"