Java应用:编写高级JavaScript应用代码[1]

作者&投稿:答项 (若有异议请与网页底部的电邮联系)
~

   创建高级对象

  使用构造函数来创建对象

  构造函数是一个函数 调用它来例示并初始化特殊类型的对象 可以使用 new 关键字来调用一个构造函数 下面给出了使用构造函数的新示例

  var myObject = new Object(); // 创建没有属性的通用对象   var myBirthday = new Date( ); // 创建一个 Date 对象   var myCar = new Car(); // 创建一个用户定义的对象 并初始化其属性

  通过构造函数将一个参数作为特定的 this 关键字的值传递给新创建的空对象 然后构造函数负责为新对象执行适应的初始化(创建属性并给出其初始值) 完成后 构造函数返回它所构造的对象的一个参数

  编写构造函数

  可以使用 new 运算符结合像 Object() Date() 和 Function() 这样的预定义的构造函数来创建对象并对其初始化 面向对象的编程其强有力的特征是定义自定义构造函数以创建脚本中使用的自定义对象的能力 创建了自定义的构造函数 这样就可以创建具有已定义属性的对象 下面是自定义函数的示例(注意 this 关键字的使用)

  function Circle (xPoint yPoint radius) {   this x = xPoint; // 圆心的 x 坐标    this y = yPoint; // 圆心的 y 坐标    this r = radius; // 圆的半径   }

  调用 Circle 构造函数时 给出圆心点的值和圆的半径(所有这些元素是完全定义一个独特的圆对象所必需的) 结束时 Circle 对象包含三个属性 下面是如何例示 Circle 对象

  var aCircle = new Circle( );

  使用原型来创建对象

  在编写构造函数时 可以使用原型对象(它本身是所有构造函数的一个属性)的属性来创建继承属性和共享方法 原型属性和方法将按引用复制给类中的每个对象 因此它们都具有相同的值 可以在一个对象中 更改原型属性的值 新的值将覆盖默认值 但仅在该实例中有效 属于这个类的其他对象不受此更改的影响 下面给出了使用自定义构造函数的示例 Circle(注意 this 关键字的使用)

  Circle prototype pi = Math PI;  function ACirclesArea () {   return this pi * this r * this r; // 计算圆面积的公式为 ?r   }  Circle prototype area = ACirclesArea; // 计算圆面积的函数现在是 Circle Prototype 对象的一个方法   var a = ACircle area(); // 此为如何在 Circle 对象上调用面积函数   使用这个原则 可以给预定义的构造函数(都具有原型对象)定义附加属性 例如 如果想要能够删除字符串的前后空格(与 VBScript 的 Trim 函数类似) 就可以给 String 原型对象创建自己的方法   // 增加一个名为 trim 的函数作为  // String 构造函数的原型对象的一个方法   String prototype trim = function()  {   // 用正则表达式将前后空格   // 用空字符串替代    return this replace(/(^\s*)|(\s*$)/g );  }  // 有空格的字符串  var s = leading and trailing spaces ;  // 显示 leading and trailing spaces ( )   window alert(s + ( + s length + ) );  // 删除前后空格  s = s trim();  // 显示 leading and trailing spaces ( )   window alert(s + ( + s length + ) );

   递归

  递归是一种重要的编程技术 该方法用于让一个函数从其内部调用其自身 一个示例就是计算阶乘 的阶乘被特别地定义为 更大数的阶乘是通过计算 * * 来求得的 每次增加 直至达到要计算其阶乘的那个数

  下面的段落是用文字定义的计算阶乘的一个函数

   如果这个数小于零 则拒绝接收 如果不是一个整数 则将其向下舍入为相邻的整数 如果这个数为 则其阶乘为 如果这个数大于 则将其与相邻较小的数的阶乘相乘

  要计算任何大于 的数的阶乘 至少需要计算一个其他数的阶乘 用来实现这个功能的函数就是已经位于其中的函数 该函数在执行当前的这个数之前 必须调用它本身来计算相邻的较小数的阶乘 这就是一个递归示例

  递归和迭代(循环)是密切相关的 ? 能用递归处理的算法也都可以采用迭代 反之亦然 确定的算法通常可以用几种方法实现 您只需选择最自然贴切的方法 或者您觉得用起来最轻松的一种即可

  显然 这样有可能会出现问题 可以很容易地创建一个递归函数 但该函数不能得到一个确定的结果 并且不能达到一个终点 这样的递归将导致计算机执行一个 无限 循环 下面就是一个示例 在计算阶乘的文字描述中遗漏了第一条规则(对负数的处理) 并试图计算任何负数的阶乘 这将导致失败 因为按顺序计算 的阶乘时 首先不得不计算 的阶乘 然而这样又不得不计算 的阶乘 如此继续 很明显 这样永远也不会到达一个终止点

  因此在设计递归函数时应特别仔细 如果怀疑其中存在着无限递归的可能 则可以让该函数记录它调用自身的次数 如果该函数调用自身的次数太多 即使您已决定了它应调用多少次 就自动退出

  下面仍然是阶乘函数 这次是用 JScript 代码编写的

  // 计算阶乘的函数 如果传递了  // 无效的数值(例如小于零)   // 将返回 表明发生了错误 若数值有效   // 把数值转换为最相近的整数 并  // 返回阶乘   function factorial(aNumber) {   aNumber = Math floor(aNumber); // 如果这个数不是一个整数 则向下舍入    if (aNumber < ) { // 如果这个数小于 拒绝接收     return ;    }    if (aNumber == ) { // 如果为 则其阶乘为     return ;   }   else return (aNumber * factorial(aNumber )); // 否则 递归直至完成   }

   变量范围

  JScript 有两种变量范围 全局和局部 如果在任何函数定义之外声明了一个变量 则该变量为全局变量 且该变量的值在整个持续范围内都可以访问和修改 如果在函数定义内声明了一个变量 则该变量为局部变量 每次执行该函数时都会创建和破坏该变量 且它不能被该函数外的任何事物访问

  像 C++ 这样的语言也有 块范围 在这里 任何一对 {} 都定义新的范围 JScript 不支持块范围

  一个局部变量的名称可以与某个全局变量的名称相同 但这是完全不同和独立的两个变量 因此 更改一个变量的值不会影响另一个变量的值 在声明局部变量的函数内 只有该局部变量有意义

  var aCentaur = a horse with rider ; // aCentaur 的全局定义   // JScript 代码 为简洁起见有省略   function antiquities() // 在这个函数中声明了一个局部 aCentaur 变量   {   // JScript 代码 为简洁起见有省略    var aCentaur = A centaur is probably a mounted Scythian warrior ;   // JScript 代码 为简洁起见有省略    aCentaur += misreported; that is ; // 添加到局部变量    // JScript 代码 为简洁起见有省略   } // 函数结束   var nothinginparticular = antiquities();  aCentaur += as seen from a distance by a naive innocent ;  /*

  在函数内 该变量的值为 A centaur is probably a mounted Scythian warrior   misreported; that is 在函数外 该变量的值为这句话的其余部分    a horse with rider as seen from a distance by a naive innocent   */

lishixinzhi/Article/program/Java/JSP/201311/20710



这8个项目毕业学完嘎嘎进大厂
答:Bootique是一项用于构建无容器可运行Java应用的极简技术。该项目允许大家创建REST服务、Web应用、任务、数据库迁移等等,且一切都立足于模块实现。 该项目的目标在于将应用从Java容器中解放出来,允许开发者重新回归main()方法。另外其中还包含部分内置命令,因此就算各位需要处理的代码量不多或者并未向应用中导入任何模块,仍...

Java编写一个程序,有四个整数分别用a,b,c,d表示,请用条件运算符找出其中...
答:public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.print("输入a:"); int a = scanner.nextInt(); System.out.print("输入b:"); int b = scanner.nextInt(); System.out.print("输入c:"); int c = scanner.n...

Java是什么好学吗?
答:17、Android基础:Android开发调试环境;Android应用结构;界面组件与界面编程;资源管理;四大组件;18、Android中级:文件IO和SQLite;图形、图像与动画;音频、视频的录制与播放;传感器编程;GPS应用;19、Android高级:网络编程与Web Service;OpenGL_ES 3D开发;整合Google服务;使用NDK开发;java和c相互调试...

零基础如何成功转行入Java?
答:那如何学java呢?学jav无非就是自学和报班这两种方式,至于java自学还是报班好,这个还是需要根据您自身的条件来判断的。如果您自控能力、自学能力且有基础那自学好。反之报班好。下面跟您说一下java自学与报java培训班学的不同之处,供您参考。Java自学:好的地方是省钱,不太好的就是学习时间不确定...

如何正确掌握Java的学习方法?
答:作为掌握了JAVA技术,将来准备成为Java软件工程师的人来说,要想成为JAVA工程师肯定要学习JAVA。一般的程序员或许只需知道一些JAVA的语法结构就可以应付了。但要成为高级JAVA工程师,我们需要对JAVA做比较深入的研究。为大家总结了以下三个方面的学习方法:一、软件开发学习路线。两千多年的儒家思想孔孟之道,中庸的思想透入...

.JAV是什么?
答:Java平台由Java虚拟机(Java Virtual Machine)和Java 应用编程接口(Application Programming Interface、简称API)构成。Java 应用编程接口为Java应用提供了一个独立于操作系统的标准接口,可分为基本部分和扩展部分。在硬件或操作系统平台上安装一个Java平台之后,Java应用程序就可运行。现在Java平台已经嵌入了...

javr语言获得成功的关键是java定位于什么开发
答:javr语言获得成功的关键是java定位于嵌入式系统开发。JavaServlet的推出,Java在电子商务方面开始崭露头角,尤其是JSP技术的出现,使得Java成为基于Web应用程序的首选开发工具。

javabus的入口网址是什么?
答:JavaBus是一个非常方便的Java类库的学习及服务平台,在Java程序开发中,使用JavaBus不仅可以优化学习效率,而且可以方便快捷地调试代码,帮助Java程序开发人员更好地解决实际开发工作中遇到的问题。javabus这个后缀起源于Java编程语言,旨在为Java编程相关的网站提供更好的域名选择。由于Java编程语言具有广泛的应...

日本javalibrary最受欢迎的
答:Lombok插件还提供了一些其他的功能,例如@Data注解可以自动生成equals、hashCode、toString方法,@Builder注解可以生成builder模式的代码,@SneakyThrows注解可以把编译时异常转化为运行时异常等等。Lombok常见的应用场景:1、简化Java Bean的开发。Java Bean是Java中常用的一种数据对象,包括一些成员变量和getter/...

JAV是什么东西?
答:Java并不是为 Internet,WWW而设计的,它也可以用来编写独立的应用程序。Java 是一种面向对象语言。Java 语言类似于 C++ 语言,所以已熟练掌握 C++语言的编程人员,再学习 Java 语言就容易得多!Java 程序需要编译。实际上有两种 Java 程序:一种 Java 应用程序是一个完整的程序,如 Web 浏览器。一种...