对JavaScript中原型的理解

2016-02-19 16:15 4 1 收藏

生活已是百般艰难,为何不努力一点。下面图老师就给大家分享对JavaScript中原型的理解,希望可以让热爱学习的朋友们体会到设计的小小的乐趣。

【 tulaoshi.com - Web开发 】

  从纯粹的面向对象思想(Java思想)向Javascript语言面向对象思想的转化沉痛而惨烈。Javascript中对象和类的概念转化悄然不动声色,让人迷糊。有时候,对Java理解得越清楚,对Javascript理解起来就越费劲。其中,对Javascript的原型对象的理解颇费功夫。

  按照定义,每个javascript对象都有一个原型对象(简称原型),这个原型是由该对象的构造函数所定义(javascript自动创建的),并且对象继承原型的所有属性和方法(函数),比如 一个String对象 的原型为 String.prototype ,如果我们想要给String类添加方法,可以这样做(比如添加常用的trim()方法):

  js 代码

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/webkaifa/)

String.prototype.trim = function (){   

  return this.replace(/(^s*)|(s*$)/g, "");   

}  

  这个特性是相当令人惊讶的,因为这破坏了封装性,就好像在Java中你可以对Object进行修改一样。而function() 可以当作数据来给左操作数赋值(而不仅仅是当作动作),也让人吃惊。

  对于Javascript内部类都可以这么改,对于自定义类当然可以这么改,如:

  js 代码

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/webkaifa/)

function Circle(x,y,r){   

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/webkaifa/)

  this.x = x;   

  this.y = y;   

  this.r = r;   

  //this.prototype = null ;     /*这句代码可以看作是隐含存在的,因为javascript 中“类”的定义和函数的定义结构上没有差异,所以可以说,所有函数都隐藏有这样一个属性。*/   

}  

  然后,我们给原型加一个得到面积的方法:

Circle.prototype.area = function(){   

  return this.r * this.r * 3.14159 ;   

}  

  这样使用:

  js 代码

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/webkaifa/)

var circ = new Circle(0,0,2) ;   

alert(circ.area()) ;  

  为什么要使用原型呢?因为我们可以在类中很轻松的定义我们想要实现的方法,如,还是上面那个求圆面积:

  js 代码

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/webkaifa/)

function Circle(x,y,r){   

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/webkaifa/)

  this.x = x;   

  this.y = y;    

  this.r = r ;   

  this.area = function (){   

    return this.r * this.r * 3.14159 ;    

  }   

}   

//调用:

var circ = new Circle(0,0,2) ;   

alert(circ.area()) ; 

  两者的调用代码完全一样,那为什么要使用原型呢?我感觉主要是为了解决对内部类型的继承问题,也就是说当你无法修改String的构造函数而想要让所有String实例都具有某一方法的时候,你可以用这个prototype。

来源:http://www.tulaoshi.com/n/20160219/1611439.html

延伸阅读
一、当两个并发线程访问同一个对象object中的这个synchronized(this)同步代码块时,一个时间内只能有一个线程得到执行。另一个线程必须等待当前线程执行完这个代码块以后才能执行该代码块。 二、然而,当一个线程访问object的一个synchronized(this)同步代码块时,另一个线程仍然可以访问该object中的非synchronized(this)同步代码块...
标签: Web开发
javascript 对ListBox的增 删 假设有2个ListBox,ID分别为lbLeft,lbRight 选中lbLeft里的项添加到lbRight里:  function add()     {         var left;         var right;         left = document....
  函数是进行模块化程序设计的基础,编写复杂的Ajax应用程序,必须对函数有更深入的了解。javascript中的函数不同于其他的语言,每个函数都是作为一个对象被维护和运行的。通过函数对象的性质,可以很方便的将一个函数赋值给一个变量或者将函数作为参数传递。在继续讲述之前,先看一下函数的使用语法: function func1(…){…} var...
标签: ASP
先说session     对SESSION的争论好象一直没有停止过,不过能理解SESSION的人应该占90以上。但还是讲讲,别嫌老~     有一些人赞成用SESSION,有一些人不赞成。但这个问题到底要怎么说。不妨听听我的看法,如果有错误请不要朝我丢东西,金条和硬币除外。      首先要先说SESSION是干什么...
对产前检查的理解和判断 人的机体是有一定的免疫作用的,如果遭遇病原体感染时,机体会产生相TuLaoShi.com应的抗体来抵抗病毒入侵,所以我们可以通过检测抗体了解是否受过病毒感染。抗体产生的一般规律是IgM抗体先产生,而后产生IgG抗体。IgM抗体达到高峰后会逐渐下降,而IgG抗体会一直维持高峰值。所以我们一般把IgG阳...

经验教程

68

收藏

33
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部