继承

父类与子类

子类是父类的一个子集

比如:人类和医生类,医生类是人类的子集;人类是父类,医生类是子集

父类与子类在特性(属性和方法)上有什么关系

方法:子类对象可以调用父类原型上的方法

//父类:人
function Person(name,age){
    this.name = name;
    this.age = age;
}
Person.prototype.breathe = function(){
    console.log(this.name + " is breathing");
}
//子类:医生
function Doctor(name,age,title){
    this.name = name;
    this.age = age;
    this.title = title;
}
//医生作为人的子类,可以调用人原型上的方法
//实现原型的继承
Doctor.prototype.__proto__ = Person.prototype;
var d1 = new Doctor("zhangsan",20,"doctor");
d1.breathe();//正常调用
Doctor.prototype.__proto__ = Person.prototype;

对象访问自己的原型用__proto__

任何对象都有原型。访问方式都是对象.__proto__

Doctor.prototype时医生类的原型对象

可以通过__proto__的方式访问原型对象的原型

把Person类的原型赋值给医生类原型的原型,产生以下效果

1.人类原型上存在方法breathe,即Person.prototype.breathe()

2.赋值后医生类原型的原型就是人类原型,所以存在方法Doctor.prototype.__proto__.breathe()

3.根据规则,存在Doctor.prototype.__proto__.breathe()就一定存在Doctor.prototype.breathe()

4.Doctor实例化出的对象d1存在

d1.__proto__ == Doctor.prototype    //true

5.根据规则存在d1.__proto__.breathe()就一定存在d1.breathe()

综上,通过Doctor.prototype.__proto__ = Person.prototype;可以实现原型的继承,子类对象可以调用父类原型的方法。

JavaScript之继承-LMLPHP

Object类

object类的原型上封装类很多基本的方法,如toString等

console.log(object.prototype);

在声明类是,所有类的圆心都自动继承object的原型

function Person(name, age) {
    this.name = name;
    this.age = age;
}
Person.prototype.say = function () {
    console.log(this.name + ":" + this.age);
}
var p = new Person("zhangsan", 18);
console.log(p.toString());//正常调用

Person类在声明时,原型对象自动继承了object的原型

即Person类自动成为了object的子类

p作为子类对象,可以调用父类原型上的方法,即p.toString()

03-22 15:32