文章目录
  1. 1. 对javascript的理解

对javascript的理解

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

js 代码

String.prototype.trim = function (){
  

  return
this.replace(/(^\s*)|(\s*$)/g, “”);   

}  

\

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

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

function Circle(x,y,r){   

  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 代码

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

alert(circ.area()) ;  

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

js 代码

function Circle(x,y,r){   

  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。

文章目录
  1. 1. 对javascript的理解