javascript基础:prototype原型(属性、方法)
2017-01-19 15:09
543 查看
Javascript支持prototype对象,可以添加对象副本的属性和方法,还可以创建prototype对象的继承。
在class-based语句中,类是一种抽象的数据类型,比如:c++,java,c#都是基于类的语句。
而Javascript是prototype-based,也就是基于原型的语言,所以,类和对象的区别不是很明显。
对象就是一个实际的实体,可以用现成的对象作为原型prototype,来创建其他的对象,而且这个对象可以分享原型对象的属性、方法,使用prototype对象继承其他的对象。
这里先讲通过prototype对象来添加对象的属性和方法,下一篇再说prototype对象继承。
代码:
输出:
代码讲解:
(1)定义了一个构造函数Cicle
(2)接下来通过prototype增加了PI属性、show方法
(3)一开始我以为,这个prototype定义的类似于很多编程语言中的静态成员变量、静态成员函数,但从输出看并不是这样。
在输出中可以看出,比如:a对象没有修改PI属性的值,也没有修改show方法的定义,所以就使用默认的值、定义。
而对象b,c,都修改了PI的值、show方法的定义,所以输出的就不是默认值了,而且调用的show方法,也是对象自己的方法。
在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方法,也是对象自己的方法。
相关文章推荐
- java基础64 JavaScript中的Arrays数组对象和prototype原型属性(网页知识)
- JavaScript:prototype属性使用方法
- JavaScript为对象原型prototype添加属性的两种方式
- javascript的prototype给对象增加方法属性
- javascript的Prototype属性 、解释及常用方法
- JavaScript 中 Object ,Prototype 相关的属性和方法
- JAVASCRIPT基础学习篇(4)--ECMAScript Basic:prototype属性及通过该属性建立面向对象的JavaScript
- JavaScript:prototype属性使用方法
- javascript 对象及原型继承有关的属性:constructor、prototype、isPrototypeOf、instanceof、in 、hasOwnProperty 等等
- 重拾Javascript基础(三) - DOM属性&方法
- js的原型实例prototype--方法--属性,构造,赋值--方法同样有原型--原型含义
- Javascript的原型对象和prototype属性
- JavaScript中的prototype(原型)属性研究 (http://www.moviekr.com/html/21/70/0603/25075.htm)
- javascript中的prototype(原型)属性研究
- javascript 对象及原型继承有关的属性:constructor、prototype、isPrototypeOf、instanceof、in 、hasOwnProperty 等等
- javascript中Object类原型对象的属性和方法
- JavaScript中的prototype(原型)属性研究
- JavaScript 对象方法 类方法 原型方法的区别;私有属性 公有属性 公有静态属性的区别
- JavaScript 中 Object ,Prototype 相关的属性和方法
- Javascript prototype属性使用(给内置对象添加新的方法,方便调用)