对javascript原型的理解(转载)
2008-11-16 10:41
218 查看
http://metaphy.javaeye.com/blog/91665
按照定义,每个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。
js 代码
按照定义,每个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。
js 代码
相关文章推荐
- [乐意黎转载]JavaScript中原型对象的彻底理解
- 理解Javascript_05_原型继承原理 ,转载文章
- [乐意黎转载]JavaScript原型彻底理解2---继承中的原型链
- 深入理解javascript原型和闭包(6)——继承
- 深入理解javascript原型和闭包(完结)
- 深入理解javascript原型和闭包(完结)
- 深入理解javascript原型和闭包 深入理解javascript原型和闭包(7)——原型的灵活性
- 深入理解javascript原型和闭包系列 深入理解javascript原型和闭包(14)——从【自由变量】到【作用域链】
- Javascript之旅——第十一站:原型也不好理解?
- 深入理解JavaScript系列(5):强大的原型和原型链
- 深入理解javascript原型和闭包(2)——函数和对象的关系
- 深入理解javascript原型和闭包(10)——this
- 《学习日记》---javascript的原型链理解
- 深入理解JavaScript的闭包特性 如何给循环中的对象添加事件(转载)
- 全面理解面向对象的 JavaScript(转载)
- 深入理解javascript原型和闭包(7)——原型的灵活性
- 深入理解javascript原型和闭包(16)——补充:上下文环境和作用域的关系
- 深入理解javascript原型和闭包(9)——简述【执行上下文】下
- 深入理解JavaScript系列(42):设计模式之原型模式
- 【JavaScript高级程序设计】读书笔记之二 —— 理解对象的原型、继承