prototype的认识

在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方法。

原文地址:https://www.cnblogs.com/smartyu/p/5197384.html