js中对prototype对象继承的一个实例

//只得考虑的原型链的一段代码
//实例化triangle,去调用Triangle的构造函数,注意此时prototype是为空的,所以此时的实例化对象triangle中的prototype为空,所以之后去调用getAre报错
//紧接着会去调用Ploygon构造函数,并且对Polygon的prototype进行初始化
//然后对Triangle的prototype进行初始化,所以之后第二个实例化的对象就有getAre方法了。


//如何更改在所有triangle对象实例化之前,先将Triangle方法的prototype与Polygon的实例化对象绑定,这是实例化triangle对象会有一个getAre的引用(链接),然后在其调用
//调用实例化构造函数的时候会去重载prototype的getAre方法,因为是引用所以triangle对象的方法也被改变了。
function Polygon(iSide){
	console.log("Polygon constructor");
	this.side = iSide;	
	if(typeof Polygon._init == "undefined"){
		console.log("Polygon protype");
		Polygon.prototype.getArea = function(){
			return 0;
		};
	};
	Polygon._init = true;
};

function Triangle(iBase,iHeight){
	console.log("Triangle consturctor");
	Polygon.call(this,3);
	this.base = iBase ;
	this.height = iHeight;
	
	if(typeof Triangle._init == "undefined"){
		Triangle.prototype = new Polygon();  //将这句话注释掉
		//console.log(Triangle.prototype.getArea());
		console.log("triangle prototype");
		
		Triangle.prototype.getArea = function(){
			return 0.5 * this.height * this.base;
		};
	};
	Triangle._init = true;
};
//Triangle.prototype = new Polygon(); //在这添加原型与实例化对象的绑定。
var triangle = new Triangle(3,4);

var triangle2 = new Triangle(3,4);
//console.log(triangle2.base);
//console.log(triangle2.height);
//console.log(triangle2.side);
console.log(triangle2.getArea());
console.log(triangle.getArea());

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值