《JavaScript应用程序设计》一一3.3 原型

3.3 原型

原型让你能够对现有对象克隆,从而构建出一个拥有其范性方法的代理对象。
工厂函数
在JavaScript中,有许多灵活且简单的构造函数,所有JavaScript中的函数均可以返回对象,所以你无需再使用构造函数去构建对象。相较于构造函数,工厂函数不仅为调用者封装了对象实例化的细节,而且省略了多余的new关键字。在工厂函数中,可以组合使用JavaScript的所有语言特性,甚至能够在程序运行期间,动态修改对象的构建逻辑(而且丝毫不影响正在实例化的对象)。
流式API(不要与流式JavaScript搞混淆)
流式API是一组能够让代码执行看起来更像自然语言的接口协议,实现了流式API的方法大都可以被链式调用,但并不是所有可以被链式调用的方法都可以视为流式API。流式API的接口协议规定,对象中的每一项方法均可以返回一个对象,而这个对象中包含了下一步执行所需要的方法组。通过这种方式,方法可以以短句的形式衔接在一起,每个方法都在前一项方法的执行结果上被调用。jQuery与Jasmine均是流式API应用的例子。
随着Prototype、jQuery等类库的兴起,流式JavaScript的概念在社区中得到普及,但是“流式”风格并不是由某个人或某个组织所开创,也不是什么新的独一无二的技术,它只是由JavaScript语言自身的核心特性自然发展演化而来。就其本身来说,既不是一门新的语言风格,也不是一项从其他语言中借鉴来的编程习惯。
甚至“流式”这一命名都显得有些愚蠢,其实它并不是为了与市面上多数JavaScript教程中笨重的代码模式区分开。严格来说,“流式”不是一种新的编程风格,它只是那些资深JavaScript程序员平日里所用到的编程最佳实践。
随着时间的推移,我们可以看到“流式”正成为推动JavaScript语言向前演进的一股力量。它可能会给JavaScript带来新的语言特性,甚至是执行效率的提升。
原型
原型是一种特别的对象,它为指定对象建模并作为其原始模型。它的作用与类极为类似,因为通过原型你可以构建出任意数量的对象实例,不同之处在于它也仅仅是对象。在JavaScript中,原型有两种使用方式:原型代理与原型克隆。

时间: 2024-10-24 03:03:15

《JavaScript应用程序设计》一一3.3 原型的相关文章

JavaScript高级程序设计 扩展--关于动态原型_javascript技巧

但是作者Nicholas C. Zakas在[动态原型]方式创建对象的时候没有深究可能会存在的问题和解决方案.而仅仅在继承的时候对[动态原型]的瓶颈作了说明.即在作子类继承的时候,不能通过动态原型的方式来实现. 原文大致如下: 继承机制不能采用动态化的原因是:prototype对象的唯一性.实例代码: 复制代码 代码如下: function A (i) { this.a = i; if (typeof A._init == 'undefined') { A.prototype.func = fu

《JavaScript应用程序设计》一一第3章 对象

第3章 对象JavaScript拥有原型继承.动态对象扩展.闭包等特性,在现今市面上流行的所有编程语言中,基于对象编程的JavaScript最具灵活性与表现力.在JavaScript中,你可以将诸如函数.数组.键/值对以及一些基础数据结构都视为对象,甚至一些原始数据类型在用点语法做属性操作时,也会被JavaScript隐式当作对象处理.为了能够调用原型链上的方法,原始数据类型在使用时会被临时包裹为对象,例如:'tonya@example.com'.split('@')[1]; // => exa

javascript组合使用构造函数模式和原型模式实例

  本文实例讲述了javascript组合使用构造函数模式和原型模式的方法.分享给大家供大家参考.具体如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 function testPrototype2(){ function Person3(name, age, job){ this.name=name; this.age=age; this.job=job; this.friends =["shelb", "

JavaScript高级程序设计(第3版)学习笔记8 js函数(中)_基础知识

6.执行环境和作用域 (1)执行环境(execution context):所有的JavaScript代码都运行在一个执行环境中,当控制权转移至JavaScript的可执行代码时,就进入了一个执行环境.活动的执行环境从逻辑上形成了一个栈,全局执行环境永远是这个栈的栈底元素,栈顶元素就是当前正在运行的执行环境.每一个函数都有自己的执行环境,当执行流进入一个函数时,会将这个函数的执行环境压入栈顶,函数执行完之后再将这个执行环境弹出,控制权返回给之前的执行环境. (2)变量对象(variable ob

JavaScript高级程序设计(第3版)学习笔记6 初识js对象_基础知识

在房子里面可以放你想放的任意事物--如果你有足够的美学造诣,你甚至可以弄一个房中房试试--当然,为了方便管理,我们会给房子里存放的所有事物都会取上一个不重复的名字,比如医药房间里的各种药品名称.在ECMAScript中,你可以在对象中存放任意你想放的数据,同样,我们需要给存放的数据取一个名字--也就是对象的属性名,再存放各种数据.再看看ECMA-262中对象的定义:无序属性的集合,其属性可以包含简单数据类型值.对象或者函数. 进入对象,我开始有些激动了,说实话,让我想起做这系列学习笔记的最初原因

《JavaScript高级程序设计》学习笔记

系统学习JS, 从<JavaScript高级程序设计>入门,通过学习jQuery或者angularJS源码来进阶. 第1章 JavaScript简介 1.JS问世的目的是处理以前由服务器端语言(如Perl)负责的一些输入验证操作, 由Netscape主导开发,那时候微软的IE还不能独领风骚.最初叫做LiveScript,当时媒体热炒Java,于是改名为JavaScript. JavaScript和ECMAScript通常指同一门语言,但是,JavaScript是ECMA-262标准的实现和扩展

举例说明JavaScript中的实例对象与原型对象_基础知识

首先声明:javascript中每个对象都有一个constructor属性和一个prototype属性.constructor指向对象的构造函数,prototype指向使用构造函数创建的对象实例的原型对象. function Person(){ } var person = new Person(); Person.prototype = { constructor : Person, name : 'zxs', age : 24, sayName : function(){alert(this

JavaScript高级程序设计(第三版)学习笔记6、7章_javascript技巧

第6章面向对象的程序设计 对象 1.数据属性 configurable表示能否通过delete删除属性从而重新定义属性能否修改属性的特性或能否把属性修改为访问器属性默认为true enumerbale表示能否通过for-in访问属性默认true writable表示能否修改属性值默认true value数据存储位置默认undefined 修改默认属性特性Object.defineProperty()接收三个参数属性所在对象属性名描述符对象描述符对象属性必须是configurable.enumer

JavaScript高级程序设计(第3版)学习笔记3 js简单数据类型_基础知识

ECMAScript是一种动态类型的语言,构建于5种简单数据类型(Undefined.Null.Boolean.Number.String)和一种复杂数据类型(Object)的基础之上.这篇文章就来复习一下简单数据类型,我会尽量从编程实践的角度来描述,下面代码运行环境为FireFox 14.0.1. 简单数据类型 简单数据类型 取值 Undefined undefined(只有一个值) Null null(只有一个值) Boolean true|false(只有两个值) Number 数值 St

javascript面向对象程序设计高级特性经典教程(值得收藏)_javascript技巧

本文实例讲述了javascript面向对象程序设计的高级特性.分享给大家供大家参考,具体如下: 1.创建对象的三种方式: 第一种构造法:new  Object var a = new Object(); a.x = 1, a.y = 2; 第二种构造法:对象直接量 var b = { x : 1, y : 2 }; 第三种构造法:定义类型 function Point(x, y){ this.x = x; this.y = y; } var p = new Point(1,2); 2.访问对象