prototype在javascript是非常重要的,因为javascript没有继承的概念,所以javascript可以通过prototype来实现类似java中的继承,,且只有函数才有原型,原型是一个对象,对象没有原型,如下:
function FF(){};
alert(FF.prototype); // 这是一个对象
var f = new FF();
alert(f.prototype); //undefined
对象还可以动态添加属性
//给对象添加属性
FF.a = "FF.a";
alert(FF.a); //FF.a
f.a = "f.a";
alert(f.a); //f.a
FF.prototype.a = "FF.prototype.a";
alert(FF.prototype.a); // FF.prototype.a
而且通过原型添加的属性可以通过函数的属性访问,但不能通过对象的属性访问
FF.prototype.b = "FF.prototype.b";
alert(f.b); //FF.prototype.b
alert(FF.b); //undefined
利用prototype的概念实现继承
//理解javascript中的继承
function Animal(){
this.a = "aaa";
}
Animal.prototype.name = "动物";
Animal.prototype.sex = "1";
var aa = new Animal();
alert(aa.a); // aaa
alert(aa.name); //动物
alert(aa.sex); //1
function Pig(){
this.b = "bbb";
}
Pig.prototype = new Animal(); //实现了继承关系
var p = new Pig();
//搜索顺序:p对象 -> p的原型对象 ->p的原型对象的原型对象 -> ....
alert(p.a); // aaa
alert(p.name); //动物
alert(p.sex); //1
alert(p.b); //bbb
function LittlePig(){
}
LittlePig.prototype = new Pig();
var lp = new LittlePig();
alert(lp.name); // 动物
alert(lp.a); // aaa
alert(lp.b); // bbb