javascript继承之原型式继承(四)

借助原型可以基于已有的对象创建新的对象,同时还不必因此创建自定义类型

1
2
3
4
5
function object(o){
function F(){} // 临时性的构造函数
F.prototype = o;
return new F();
}
  • 创建一个对象

    1
    2
    3
    4
    5
    var car = {
    master: "car1Master",
    color: "黑色",
    colorArray:["黑色","白色","红色","蓝色"]
    }
  • 通过object方法原型式继承

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    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()方法规范了原型式继承,接收两个参数:一个用作新对象原型的对象,二是为新对象定义额外属性的对象

1
2
3
4
5
6
7
8
9
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:以指定的任何属性覆盖原型对象上的同名属性

1
2
3
4
5
6
7
8
var car3 = Object.create(car,{
color: {
value: "绿色"
}
})

console.log(car3.color);
// 结果:绿色