JavaScript原型

javaScript所有function类型对象都有一个prototype属性,并且其本身是一个object类型对象

原型继承

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
functiuon Person(name){
this.name = name;
}
Person.prototype.sayHello=function(){
alert("Hello,i'm "+this.name);
}
function Employee(name.salary){
Person.call(this.name);
this.salary = salary;
}
Employee.prototype = new person();
Employee.prototype.showMetheMoney=function(){
alert(this.name+"$"+this.salary);
}
var Bill = new Person("Bill");
var Jobs = new Employee("Jobs","1234");
Bill.sayHello();//通过对象直接调用到prototype的方法
Jobs.sayHello();//通过子类对象直接调用基类prototype方法!!!
Jobs.showMetheMoney();//通过子类对象直接调用子类的prototype的方法
alert(Bill.sayHello == Jobs.SayHello);//输出:true

说明

当从一个对象那里读取属性或者调用方法时,如果自身没有,则会去自己关联的prototype对象里寻找,如果prototype没有,又会去自己prototype关联的前辈里寻找,直到找到或者追溯结束为止。(追溯机制由prototype链实现),在原型链的最末端,就是Object构造函数prototype的属性指向的原型对象

注:原型继承时,子类可以有自己方法和属性,可以修改父类给他的属性,但是不能覆盖不会影响到其他的子类。