在js中任何对象都拥有prototype属性,解释为:返回对象类型原型的引用。
prototype可以将其他属性方法克隆下来。
function A(){ this.name = "A"; this.say=function(){ alert("I am "+this.name); } } function B(){ this.name = "B"; } B.prototype = new A(); var nB = new B(); nB.say(); //I am B nB.say.call(A); //I am A
上例中,先定义了一个方法A,然后方法B通过prototype属性克隆了方法A,也就具有了A的所有属性和方法,因此当我们实例化B之后,nB是拥有say()方法的。
由于函数运行时方法和属性会从自身开始找起,如果找不到再一层一层的向prototype中找,因此this.name为B(如果function B不定义this.name那么执行时this.name就为A了)。
我们还可以通过call/apply方法改变this的指向,以调用A中的say方法。