从纯粹的面向对象思想(Java思想)向Javascript语言面向对象思想的转化,经历沉痛而惨烈。Javascript中对象和类的概念转化悄然不动声色,让人迷糊。有时候,对Java理解得越清楚,对Javascript理解起来就越费劲。尤其对Javascript的原型对象的理解颇费功夫。
按照定义,每个javascript对象都有一个原型对象(简称原型),这个原型是由该对象的构造函数所定义(javascript自动创建的),并且对象继承原型的所有属性和方法(函数),比如 一个String对象 的原型为 String.prototype ,如果我们想要给String类添加方法,可以这样做(比如添加常用的trim()方法):
js 代码
- String.prototype.trim = function (){
- return this.replace(/(^\s*)|(\s*$)/g, "");
- }
这将为所有String对象添加trim()方法!这个特性令人相当惊讶,因为这破坏了封装性,就好像在Java中你可以对String类直接进行修改一样。而且function() 可以当作数据来给左操作数赋值(而不仅仅是当作动作),也跟Java非常地不同。
对于Javascript内部类都可以这么改,对于自定义类当然可以这么改,如:
js 代码
- function Circle(x,y,r){
- this.x = x;
- this.y = y;
- this.r = r;
- //this.prototype = {constructor : this}; /*这句代码可以看作是隐含存在的,因为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;或者说,你用这个prototype来模拟实现String类的子类,达到对父类进行扩展的目的。
参考:
JavaScript权威指南(第四版)
相关推荐
本书是一本全面、深入介绍JavaScript语言的学习指南。本书共分四个部分,第1部分帮助读者快速入手,掌握基本的JavaScript编程要点;第2部分介绍JavaScript的发展和技术背景;第3部分深入探索JavaScript,介绍了语法...
深入理解JavaScript深入理解JavaScript深入理解JavaScript
深入理解 JavaScript 异步
深入理解JavaScript系列,超实用的jQuery代码段,jQuery源码分析系列。
深入理解JavaScript系列(1):编写高质量JavaScript代码的基本要点 深入理解JavaScript系列(2):揭秘命名函数表达式 深入理解JavaScript系列(3):全面解析Module模式 深入理解JavaScript系列(4):立即调用...
深入理解Javascript系列
要理解JavaScript,你得首先放下对象和类的概念,回到数据和代码的本原。前面说过,编程世界只有数据和代码两种基本元素,而这两种元素又有着纠缠不清的关系。JavaScript就是把数据和代码都简化到最原始的程度。
理解Javascript理解内存分配原理
深入理解JavaScript系列(1):编写高质量JavaScript代码的基本要点 深入理解JavaScript系列(2):揭秘命名函数表达式 深入理解JavaScript系列(3):全面解析Module模式 深入理解JavaScript系列(4):立即调用...
主要介绍了JavaScript中原型和原型链详解,本文讲解了私有变量和函数、静态变量和函数、实例变量和函数、原型和原型链的基本概念,需要的朋友可以参考下
深入理解javascript原型和闭包(01)——一切都是对象 深入理解javascript原型和闭包(02)——函数和对象的关系
JavaScript闭包深入理解.pdf
javascript原型和闭包
JavaScript内核高级教程 对javascript的深入理解
javascript字符型转换成整型 javascript字符型转换成整型
此摘要也包括一些与代码不太相关的习惯,但对整体代码的创建息息相关,包括撰写API文档、执行同行评审以及运行JSLint。这些习惯和最佳做法可以帮助你写出更好的,更易于理解和维护的代码,这些代码在几个月或是几年...