您的位置:首页 > Web前端 > JavaScript

javascript prototype 学习笔记

2017-11-25 18:18 155 查看
javascript与其他面向对象语言有很大的不同,我有时总感觉如果没学过c++,.net而直接开始学javascript反而会更好一些,反之看到javascript的某些特性,你一定会惊呼:居然还有这种操作!

首先推荐一篇不错的文章https://javascriptweblog.wordpress.com/2010/06/07/understanding-javascript-prototypes/

这篇文章有中文翻译,而且翻译水平相当不错http://www.oschina.net/translate/understanding-javascript-prototypes

高手写文章总是点到为止,对于我们这些初学者就需要多琢磨才能真正理解其中的精妙

下面我就来亲自剖析一下其中的一个例子,以下操作直接在google chrome的console里完成。

原文中有一个例子,声明了一个计算圆的面积的类Circle。

var Circle = function(radius){
this.radius = radius;
}


这个对象只是声明了一个属性radius,而并没有怎么计算面积的函数。

然后先让我们创建一个此函数的实例,取名为a.

var a = new Circle(3);
这时候我们看看直接在console里检查一下a的内容:



再看看a从Circle中继承了什么



这时候我们在所谓的基类Circle中增加一个计算面积的方法area

Circle.protype.area = function(){
return Math.PI*this.radius*this.radius;
}
请注意,这个方法area是在声明了实例a之后添加的,然后这时候我们再来检查一下a的内容



a的内容没有变化,再看看a从Circle中继承了什么



奇迹发生了,a中多了一个方法area,尽管这个方法是在a被声明之后才加入到其基类Circle中的,所以在调用a.area()时毫无意外的得到了半径为3的园的面积



哎,即使对于我这种偶尔用用C++的人来说,也只能感慨:居然还有这种操作。

本文系本人原创,如要转载请注明出处。


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  javascript