`
晨星★~雨泪
  • 浏览: 448168 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

prototype Basic - 基础代码

阅读更多


Basic - 基础代码
在开始所有的Prototype学习之旅之前,我们首先对Prototype中最常用的一些公用函数做一些研究,这些JavaScript函数将贯穿整个Prototype框架,熟练使用它们不仅有助于我们学习Prototype框架,同时也为我们自己编写JavaScript应用提供了独特的思路。

Source View - 源码解析
var Prototype = {     // 定义一个Prototype对象,封装了一些简单的静态函数和变量
  Version: '1.5.0_rc1',     // 定义当前Prototype框架的版本号
  ScriptFragment: '(?:)((\n|\r|.)*?)(?:<\/script>)',   // 返回一个正则表达式,判断是否为Script块
  emptyFunction: function() {},    // 返回一个空的函数, 该函数什么都不做, 在编写一些复杂流程中会使用此功能
  K: function(x) {return x}     // 返回参数本身, 在编写一些复杂流程中会使用此功能
}
/*****************************************************************************************************************/
function $() {   // 一个根据id读取对象的快捷函数, 根据id返回所对应的对象
  var results = [], element;
  for (var i = 0; i < arguments.length; i++) { // 可以接受多个参数, 返回由每个id所对应的对象构成的数组
    element = arguments[i];
    if (typeof element == 'string')    // 可以接受非string参数,直接返回对象本身
      element = document.getElementById(element);  // 通过DOM操作读取对象
    results.push(Element.extend(element)); // 参见Element.extend的解析, 为返回的对象添加了一些额外特性,并压入到结果数组中
  }
  return results.reduce(); // 根据参数的个数返回对象或者对象数组
}
/*****************************************************************************************************************/
var Abstract = new Object();  // 定义了一个全局的对象, 可以理解为一个命名空间, 成为一个抽象基类
/*****************************************************************************************************************/
var Try = {  
  these: function() {  // 一个静态的函数, 接受多个函数作为参数, 依次执行并返回第一个成功执行的函数的结果
    var returnValue;
    for (var i = 0; i < arguments.length; i++) {
      var lambda = arguments[i];   // 每个参数都是一个将被执行的函数
      try {
        returnValue = lambda();    // 执行函数并记录返回值
        break;                     // 第一次成功执行后, 即退出
      } catch (e) {}   // 捕获每个函数执行过程中的异常
    }
    return returnValue;
  }
}
/*****************************************************************************************************************/
var PeriodicalExecuter = Class.create();  // 定义一个定时器, 重复执行某一函数
PeriodicalExecuter.prototype = {
  initialize: function(callback, frequency) {  // 构造函数, 定义需要重复执行的函数和执行周期
    this.callback = callback;      // 需要重复执行的函数
    this.frequency = frequency;    // 重复执行的周期, 单位是秒
    this.currentlyExecuting = false;   // 是否当前执行标志

    this.registerCallback();    // 调用重复执行的函数
  },
  registerCallback: function() { // 调用window.setInterval函数完成重复执行, 返回一个标志留作被stop函数调用, 以停止定时器
    // 第一个参数巧妙地使用了bind方法, 将this作为bind的参数, 这样onTimeEvent方法内部可以通过this获取当前对象的引用
    this.timer = setInterval(this.onTimerEvent.bind(this), this.frequency * 1000);
  },
  stop: function() {
    if (!this.timer) return;   // 通过setInterval函数的返回值来判断是否当前执行
    clearInterval(this.timer);   // 当前执行时, 调用clearInterval方法来中止当前的执行
    this.timer = null;    // 将当前执行的标志设置为null
  },
  onTimerEvent: function() {
    if (!this.currentlyExecuting) {  // 判断是否当前执行, 否则跳过, 相当于一个同步信号量
      try {
        this.currentlyExecuting = true;  // 设置是否当前执行的标志
        this.callback(this);   // 调用callback完成真正的函数执行
      } finally {
        this.currentlyExecuting = false;  // 无论是否成功执行, 最终设置当前执行标志为false
      }
    }
  }
}
Field & Function Reference - 属性方法一览
Prototype ( 静态 )
Method / Property Kind Arguments Description
Version 静态属性  / 表示Prototype框架的版本号
ScriptFragment 静态属性  / 表示script代码段的正则表达式
emptyFunction 静态方法  / 返回一个什么都不做的空函数
K 静态方法 任意对象 返回传入的参数

$() ( 静态 )
Method / Property Kind Arguments Description
$() 静态方法 string或者任意对象, 参数数量不限 根据参数的类型和数量返回DOM操作的结果, 传入的参数为string时,返回document.getElementById所读取的对象; 传入的参数为非string类型的对象时, 直接返回参数本身; 当参数个数是1个时, 直接返回上述操作所得的结果; 当参数个数大于1个时, 将每个参数操作的结果组成一个对象数组返回

Abstract ( 静态 )
Method / Property Kind Arguments Description
Abstract 类  / 一个全局的对象, 可以理解为一个命名空间, 成为一个抽象基类

Try ( 静态 )
Method / Property Kind Arguments Description
these 静态方法 多个有待依次执行的函数 返回第一个成功执行的函数的执行结果

PeriodicalExecuter ( 实例 )
Method / Property Kind Arguments Description
callback 属性  / 构造函数实例化时初始化的属性, 定义定时器重复执行时真正需要调用的函数
frequency 属性(Number)  / 构造函数实例化时初始化的属性, 定义定时器重复执行的时间间隔
currentlyExecuting 属性(Boolean)  / 在整个定时器执行过程中表示是否当前执行的标志, 可以作为执行过程中的同步信号量
timer 属性  / 一个内部变量, 在registerCallback方法调用window.setInterval时记录该函数的返回值, 用以给stop方法使用
registerCallback 方法  / 在构造函数初始化完成时调用执行, 也可以直接调用该函数启动定时器, 在函数内部通过调用window.setInterval方法完成定时器功能
stop 方法 this.timer, 即重复执行时调用setInterval的返回值 用于暂停定时器, 通过实例变量调用完成
onTimerEvent 方法  / 一个内部方法, 真正调用callback完成函数执行

Analysis & Usage - 分析与使用
Extension - 扩展
$()为我们提供了一个快捷的方式,通过id来读取一个对象,从而避免了我们在编写JavaScript代码时的重复而又冗长的代码段。然而,在某些情况下,我们需要通过对象的name属性来读取对象,并对对象进行一定的操作,此时,$()方法就显得有些力不从心了。因而在这里,我针对这种需求,并模仿$()方法,实现了一个通过name来读取对象的函数。


事实上,getElementsByName()已经帮我们解决了大多数的问题。由于name在HTML的document中可以不唯一,因而我们需要对此进行简单的处理,当name唯一时,直接返回单一对象;当name不唯一时,返回一个数组(这已经与getElementsByName()本身的含义不同了,当然这仅仅是为了方便编程而已)。



http://www.demo2do.com/prototype/reference/zh-cn/Base.htm
分享到:
评论

相关推荐

    Basic-Node-Js

    这个“Basic-Node-Js”压缩包文件包含了学习Node.js基础知识的所有必要资源,适合初学者入门。 ### 1. JavaScript的基础 在深入Node.js之前,了解JavaScript的基本语法至关重要。JavaScript是一种弱类型、动态类型...

    basic-concepts:这是我在《前端工程师访谈》中所参考的准备材料的完整指南

    12. **AJAX(Asynchronous JavaScript and XML)**:AJAX技术允许在不刷新整个页面的情况下与服务器交换数据并更新部分网页内容,是现代Web应用的基础。 13. **前端框架(Frontend Frameworks)**:如React、Vue、...

    basic.js 的改进版

    "basic.js"可能是一个基础的JavaScript库或函数集合,用于HTML和JSP(JavaServer Pages)页面中的数据验证。在网页表单提交前,数据验证是必不可少的步骤,它能确保用户输入的数据符合预设的格式和规则,减少服务器...

    backbone-basic:基本视图、集合、模型设置

    最后,`backbone-basic-master`这个压缩包很可能包含了实现上述概念的示例代码。它可能包括了模型、视图、集合的定义,以及如何初始化和使用它们的示例。通过查看和学习这些代码,你可以更好地理解Backbone.js的工作...

    JavaScript_Basic:我的资源

    JavaScript_Basic:我的资源这个压缩包很可能包含了学习JavaScript基础知识的所有关键要素,包括但不限于语法、变量、数据类型、控制流、函数、对象和数组等。 首先,JavaScript的基础是它的语法,这包括了如何定义...

    Javascript原型-基本

    JavaScript中的原型(Prototype)是面向对象编程的一个核心概念,它为JavaScript实现继承提供了基础。在JavaScript中,每个函数都有一个`prototype`属性,这个属性是一个对象,用于添加或扩展对象实例的方法和属性。...

    ExtJS Basic Training

    ### ExtJS基础培训:深入解析JavaScript与ExtJS #### JavaScript简介 JavaScript是一种广泛使用的脚本语言,它在浏览器端执行,能够实现网页的动态效果。与传统的类式面向对象编程语言不同,JavaScript采用基于原型...

    使用面向对象的技术创建高级-web-应用程序---毕业论文设计外文文献翻译.doc

    本文档深入探讨了JavaScript中的面向对象编程(OOP),这对于那些习惯于使用C++、C#或Visual Basic等.NET Framework语言的开发者来说尤其重要,因为JavaScript实现OOP的方式与这些语言有很大不同。 首先,...

    基本的

    "expo-basic-master"这个文件名可能是某个JavaScript项目或者教程的名称,特别是与React Native相关的项目。React Native是Facebook推出的JavaScript框架,用于构建原生移动应用。它允许开发者使用JavaScript和React...

    IP核应用xilinx ise

    - **Basic Elements**:提供一些基础的功能IP,如比较器、计数器、编码器/译码器等。 - **Communication & Networking**:通信和网络相关的IP核。 - **Digital Signal Processing**:数字信号处理相关的IP核。 -...

    基于原型设计方法的注射模模架CAD.pdf

    基于此背景,文章提出采用AutoCAD Automation编程技术,并通过Visual Basic for Applications(VBA)二次开发AutoCAD,实现注射模模架CAD系统的设计方案。 原型设计方法(Prototype-Based Design,简称PBD)的提出...

    10大js框架 javaScript框架

    Qooxdoo借鉴了传统桌面开发工具如Visual Basic和Delphi的设计理念,非常适合C/S模式的Web应用开发,也适用于Internet Explorer之外的浏览器环境。 ### 10. Spry Spry是由Adobe推出的一套基于Ajax的框架,它包含了...

    openlayers资料收集

    OpenLayers 采用了面向对象的编程方式,并借鉴了 Prototype 框架和 Rico 库的部分组件。这样的设计让代码更加模块化,易于扩展和维护。 **2. 动态类型脚本语言** OpenLayers 使用 JavaScript 编写,支持类似于 ...

    JS语法手册,有很多啦。VB语法。SQL语法。

    原型和原型链是JS继承的基础,通过`__proto__`和`prototype`属性实现。ES6引入的类和模块系统简化了面向对象编程和模块化。 VB语法指的是Visual Basic,一种基于事件驱动的编程语言,广泛应用于Windows应用程序开发...

    javascript自动摇奖

    VBA(Visual Basic for Applications)则是一种内置于Microsoft Office套件中的编程语言,常用于自动化Excel或其他Office应用程序的任务。 在实现这个自动摇奖程序时,主要涉及以下几个关键知识点: 1. **...

    调试原理.pdf

    此外,还包括对寄存器的读写操作、系统存储器的访问、代码下载、存储器内容的转储等功能,这些都是实现有效调试的基础。 ### PC上的调试方法 在个人电脑上进行调试是最常见的做法,通常在一个集成开发环境中(IDE...

    基于JAVA的分布式聊天系统设计(含源文件).pdf

    This LAN chatting tool adopts Eclipse as the basic development environment and utilizes Java language for coding. Initially, a system prototype is rapidly established, then iteratively refined and ...

    javascript中文帮助文档

    2. **语法差异**:VBScript更接近于Visual Basic,使用缩进来表示代码块,而JavaScript使用大括号。 3. **函数定义**:VBScript使用Function关键字,JavaScript使用function关键字。 4. **变量声明**:VBScript使用...

    json实现前后台的相互传值详解.docx

    本文将详细介绍如何利用JSON来实现前后端之间的数据传输,并通过具体的示例代码来展示这一过程。 #### 二、基础知识概述 在深入探讨实现细节之前,我们首先需要了解一些关于JSON的基础知识: - **JSON简介**:JSON...

Global site tag (gtag.js) - Google Analytics