JavaScript继承上篇

function Animal() {
this.hour = 7;
this.sleep = function() {
console.log("animal need to sleep " + this.hour + " hours!");
}
}
Animal.prototype.feelings = ['puzzed', 'sad', 'respect', 'angry'];
//父类Animal,父类的原型含有feelings数组。
function Man() {
this.hobby = 'think';
}

//子类的原型设置为父类的实例
//尤其要注意必须先制定原型,然后为原型添加方法。否则呢?否则添加的方法
//只是添加到Man默认的原型上而没有添加到指定后的原型Animal的实例上。
Man.prototype = new Animal();
Man.prototype.fitht = function() {
console.log("live is a fight?");
}

var person1 = new Man();
var person2 = new Man();
console.log(person1.hobby);
console.log(person1.hour);
person1.sleep();
console.log(person1.feelings.toString());
//子类的实例不仅可以访问子类的属性,
//还可以访问父类的属性,而且还可以访问父类的原型的属性。
person2.feelings.push('happy');
console.log(person1.feelings.toString());

//可以看出,person1和person2共享引用类型对象feelings数组。
//问题是person1对feelings数组的改变会作用于person2。
//这是一个缺憾。由于这个原因,显示中很少直接单独使用原型链。

//超类的prototype指针指向Object的原型,Object原型的prototype
//指向Object的构造函数。所以所有对象上溯到最后都会抵达Object。
//Object即是造物主---上帝。
//person1对象的类型是什么?既是Man类型,也是Animal类型,也是Object类型。

猜你喜欢

转载自blog.csdn.net/qq_23143555/article/details/80720921