javascript基础:prototype原型(属性、方法)

Javascript支持prototype对象,可以添加对象副本的属性和方法,还可以创建prototype对象的继承。

在class-based语句中,类是一种抽象的数据类型,比如:c++,java,c#都是基于类的语句。


而Javascript是prototype-based,也就是基于原型的语言,所以,类和对象的区别不是很明显。

对象就是一个实际的实体,可以用现成的对象作为原型prototype,来创建其他的对象,而且这个对象可以分享原型对象的属性、方法,使用prototype对象继承其他的对象。


这里先讲通过prototype对象来添加对象的属性和方法,下一篇再说prototype对象继承。

代码:

<!doctype html>  
<html>  
 <head>  
    <meta charset="utf-8">  
    <title>Document</title>  
    <script language="javascript">  

		function circle(r,color)
		{
			this.r = r;
			this.color = color;
		}

    </script>   
 </head>  
  
 <body >  
    <script language="javascript">  
		//新增了PI属性,一个是Pi,一个是show
		circle.prototype.PI = 3.1415;
		circle.prototype.show= function showCircle() {document.write("<br>circle.prototype.show<br>");}

		var a = new circle(10,'blue');		

		var b = new circle(20,'red');
		b.PI = 3.1415926;
		b.show = function showCircle() {document.write("<br>b.show<br>");}

		var c = new circle(30,'green');
		c.PI =3.14
		c.show = function showCircle() {document.write("<br>c.show<br>");}

	    
		//由于对象a没有修改PI值,所以输出3.1415
		for (i in a)
		{
			if(typeof(a[i]) == "function")
				a[i]();
			else document.write("<br>"+ a[i]);
		}
		document.write("<hr>");

		//由于对象b修改PI值,所以输出3.1415926
		for (i in b)
		{
			if(typeof(a[i]) == "function")
				a[i]();
			else
				document.write("<br>"+ b[i]);
		}
		document.write("<hr>");

		//由于对象b修改PI值,所以输出3.14
		for (i in c)
		{
			if(typeof(a[i]) == "function")
			{
				a[i]();
			}
			else
				document.write("<br>"+ c[i]);
		}

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


输出:


代码讲解:

(1)定义了一个构造函数Cicle

(2)接下来通过prototype增加了PI属性、show方法

(3)一开始我以为,这个prototype定义的类似于很多编程语言中的静态成员变量、静态成员函数,但从输出看并不是这样。

在输出中可以看出,比如:a对象没有修改PI属性的值,也没有修改show方法的定义,所以就使用默认的值、定义。

而对象b,c,都修改了PI的值、show方法的定义,所以输出的就不是默认值了,而且调用的show方法,也是对象自己的方法。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值