javascript继承之原型式继承(四)
2018-02-04 本文已影响1人
程序蜗牛
借助原型可以基于已有的对象创建新的对象,同时还不必因此创建自定义类型
function object(o){
function F(){} // 临时性的构造函数
F.prototype = o;
return new F();
}
- 创建一个对象
var car = {
master: "car1Master",
color: "黑色",
colorArray:["黑色","白色","红色","蓝色"]
}
- 通过object方法原型式继承
var car1 = object(car);
car1.color = "白色";
console.log(car1.color);
car1.colorArray.push("棕色");
# 结果:白色
var car2 = object(car);
car2.color = "红色";
car2.colorArray.push("灰色");
console.log(car2.color);
console.log(car1.colorArray);
console.log(car2.colorArray);
# 结果:红色
# 结果:[ '黑色', '白色', '红色', '蓝色', '棕色', '灰色' ]
ECMAScript5新增了Object.create()方法规范了原型式继承,接收两个参数:一个用作新对象原型的对象,二是为新对象定义额外属性的对象
var car1 = Object.create(car);
car1.color = "白色";
car1.colorArray.push("棕色");
console.log(car1.color);
var car2 = Object.create(car);
car2.color = "红色";
car2.colorArray.push("灰色");
console.log(car2.color);
Object.defineProperties:以指定的任何属性覆盖原型对象上的同名属性
var car3 = Object.create(car,{
color: {
value: "绿色"
}
})
console.log(car3.color);
// 结果:绿色