javascript原型链简单示例(实现简单的继承)

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<title>原型链</title>
<meta name="description" content="">
<meta name="keywords" content="">
<style type="text/css">
</style>
</head>
<body>
<script type="text/javascript">
	//javascript中的每个函数中都有一个指向某一对象的prototype属性。
	//该函数被new操作符调用时会创建并返回一个对象,并且该对象中会有
	// 一个指向其原型对象的秘密链接。通过该秘密链接(在某些环境中,该链接名为__proto__)
	//我们就可以在新建的对象中调用相关原型对象的方法和属性
	//而原型对象自身也具有对象固有的普遍特性,因此本身也包含了指向其原型的链接,
	//由此就形成了一条链,我们称之为原型链。

	//原型链示例
	function Shape(){
		this.name='Shape';
		this.toString=function(){
			return this.name;
		}
	}
	function TwoDShape(){
		this.name='2D shape';
	}
	function Triangle(side,height) {
		this.name='triangle';
		this.side=side;
		this.height=height;
		this.getArea=function(){
			return this.side*this.height/2;
		}
	}
	//我们将对象直接创建在TwoDShape对象的prototype属性中
	//并没有去扩展这些对象的原有原型。确保了在继承实现之后
	//我们对Shape()所进行的任何修改、重写甚至删除,都不会对
	//TwoDShape()产生影响,因为我们所继承的只是由该构造器所建
	//的一个实体。
	TwoDShape.prototype=new Shape();
	Triangle.prototype=new TwoDShape();
	//重置constructor
	TwoDShape.prototype.constructor=TwoDShape;
	Triangle.prototype.constructor=Triangle;
	var my=new Triangle(5,10);
	var area=my.getArea(); //25
	//虽然我们这里调用的是一个继承方法,但this指向的依然是my对象
	var mystr=my.toString(); // triangle
	my instanceof Shape; //true
	my instanceof TwoDShape //true
	Shape.prototype.isPrototypeOf(my); //true
	TwoDShape.prototype.isPrototypeOf(my); //true
	Triangle.prototype.isPrototypeOf(my); //true
	//将共享属性迁移到原型中去
	//当我们用某一个构造器创建对象是,其属性就会被添加到this中去。
	function Shape(){
		this.name="Shape";
	}
	//这种实现意味着我们用new Shape()创建的每个实体都会拥有一个全新
	//的name属性,并在内存中拥有自己独立的存储空间。
	//而事实上,我们也可以选择将name 属性添加到原型上去,这样一来所有实体
	//就可以共享这个属性了。
	function Shape(){}
	//针对对象实体中的不可变属性,可以这么做。对象的共有方法尤其适合这种共享形式
	Shape.prototype.name='Shape';

</script>
</body>
</html>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

啊哈前端

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值