`
charlesEye
  • 浏览: 6881 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

javascript笔记:深入分析javascript里对象的创建(下)---从对象创建到javascript程序优化《转载》

 
阅读更多

 为什么现在主流程序语言里我们都要创建对象了?下面这个定义我想能给我们一个答案:

  面向对象语言里对象的定义是:对象是人们要进行研究的任何事物,从最简单的整数到复杂的飞机等均可看作对象,它不仅能表示具体的事物,还能表示抽象的规则、计划或事件。抛开这些抽象的定义,从计算机底层技术来理解,对象其实就是一种存储数据的方式

  写这个系列下篇着实让我犯难了,本来我想写闭包和原型的,但是总觉得不好,在和一位以前同事讨论javascript技术时候他告诉我们在计算机语言里不管是什么样的变量其实本质都是数据在计算机的存放方式了,程序就是数据和运算组成的,他说我既然在学习javascript对象的创建,那么你可以想想创建出的对象究竟是什么样的东东,他接着说道,在计算机语言里你不管在创建什么比如基本数据类型还是复杂类型的数据,其实说白了都是变量,变量就是程序里的数据,而程序的运行就是不停的检索这些数据,创建数据,再检索数据,循环往复,最终数据被持久化的过程,他还说,我经常会问他提高程序性能,优化程序的技巧,那么提高程序里对数据的检索能力就是最终极的程序性能优化了

  最近研究雅虎的前端技术,才知道这位大牛讲的精辟了。

  雅虎的前端技术力说道:

  在javascript里一共有四种存储数据的方式(最基本的):

  直接量

  直接量只代表自身,不存储特定位置。Javascript里面的直接量有:字符串、数字、布尔值、对象、数组、函数。正则表达式以及特殊的null和undefined。

  变量

  开发人员用关键字var定义的数据存储单元。

  数组元素

  存储在javascript数组对象内部,以数字为索引。

  对象成员

  存储在javascript对象内部,以字符串为索引。

  牛逼的雅虎前端工程师对这些存储数据的方式进行了性能测试,在大部分浏览器里读取直接量和变量的速度远远大于读取数组元素和对象成员。也许我们可以这么思考对象创建:每创建一个对象我们就增加了数据检索的复杂度,假如对象里再嵌套对象,那么性能损失将是以几何倍数的增加

  对象的创建或许就是应用响应缓慢梦魇的开始

  我以前说过在javascript也可以借用java里那句话,:一切皆对象,就连函数也能当做对象。如此说来创建一个函数就是在创建一个对象,而如何创建这个对象是提高程序的性能的关键所在。

  在javascript里创建一个Function对象学问大了,如果我们把函数当做对象,有些难以理解的概念也就好理解多了。

  在中篇里面我讲到了作用域,作用域到底什么呢?作用域其实是Function对象实例的一个内部属性【Scope】。函数被创建时候【Scope】这个内部属性包含了这个函数的作用域内所有对象的集合,这个集合叫做作用域链,作用域链决定了函数能访问到那些数据

  下面我创建一个函数add,代码如下:

复制代码
<script type="text/javascript">
function add(a,b)
{
var sum = a+b;
return sum;
}
</script>
复制代码

   这是一个非常常见的函数,我们先定义好这个函数,记住先不执行它,当页面被加载,这个函数也会被初始化,记得前面我讲过,这样定义的函数是属于window的,加载页面时候会预编译的,这时候函数add的作用域链如下图:

  

  

  当函数add被创建时候,如上图,add函数里作用域链所包含的对象。(只是部分了)

  为什么这样,我这里还真说不清了,我在firebug里面在函数add处定义好断点,大家看如下结果:

  

  这就是函数add的作用域链,也就是这个函数可以访问到的对象集合了。

  这里只定义了一个函数了,函数只有在运行时候才看到它的本质了。看下面代码:

 

复制代码
<script type="text/javascript">
function add(a,b)
{
var sum = a+b;
return sum;
}
add(1,2);
</script>
复制代码

  当函数被执行的时候,执行函数会创建一个称为“运行期上下文(execution context)”的内部对象。这就是我在中篇里讲到的执行环境了,不过他是在函数执行时候创建的内部对象了,而绝非是函数一个固有的属性,只有函数执行时候才会被创建了,一个运行期上下文定义了一个函数执行时的环境。函数每次执行时候对应的运行环境是独一无二的,所以多次调用同一个函数时候会导致创建多个运行期上下文,当函数执行完毕,执行器上下文就被销毁了。

  我对运行期上下文的理解就是函数内部一个匿名的函数,这么理解的原因是因为创建执行器上下文时候也会创建属于他的作用域链了,因为我认为在javascript里面只有函数才有作用域链这个属性了,不过这个特别作用域链有特殊作用:这个作用域链是用来解析标示符的

  我的对象的创建的内容讲完了,由对象的创建我引出了作用域和执行环境的概念了,也是对象的创建中的特例函数对象的创建我引入了作用域和执行环境的本质到底是什么,对象的创建的内容就此结束了,下一篇博文我将通过作用域链和执行环境来说说如何写出高效的javascript程序了。

  好久没写博客了,有朋友说我坚持不去了,当然不是了,最近事情真多,关键断网了20多天了,昨天才好了。我要做技术专家,我想任何技能的提升一定要和大家切磋,所以这个我会坚持下去了,但是真的没时间我也没法子了哈。

  喜欢做软件,就应该当做爱好,不管什么坚持不坚持,你真喜欢它不用想坚持也能坚持了。

分享到:
评论

相关推荐

    狂神说系列 JavaScript笔记

    【狂神说系列 JavaScript笔记】是一份全面且深入的JavaScript学习资源,旨在帮助开发者和初学者深入理解这门广泛应用于Web开发的脚本语言。这份笔记涵盖了JavaScript的基础语法、核心概念以及高级特性,旨在构建一个...

    JavaScript-学习笔记.pdf

    JavaScript是一种广泛应用于网页编程的语言,它是基于对象和事件驱动的脚本语言,常用于增强网页的交互性、动态效果和数据处理能力。在学习JavaScript时,我们通常会从以下几个重要知识点入手: 1. JavaScript的...

    javascript笔记 javascript笔记

    JavaScript可以用来动态地修改文档对象模型(DOM),从而改变网页的内容或布局。 **示例6:** ```html ('Down!')"&gt;Click ('Click!')"&gt;Click ``` - **解释:** 第一个链接在鼠标按下的时候会在页面上输出`Down!`;第二...

    JavaScript高级程序设计2,学习笔记---第一篇

    这篇学习笔记将带你探索JavaScript的核心概念,包括变量、数据类型、控制流、函数、对象和类等,这些都是构建复杂应用程序的基础。 首先,我们要了解JavaScript的基础语法。在JavaScript中,变量是存储数据的容器,...

    JavaScript对象笔记.rar

    什么是对象 简单点说,编程语言中的对象是对现实中事物的简化。例如,我们一个人就是一个对象,但是编程...在后面的JavaScript对象笔记中,记录了菜鸟在学习JavaScript对象的大多数资源,希望这些资源对你也有价值。

    面向对象javascript笔记

    8. **特权方法**:特权方法是介于公共和私有之间的方法,它们可以从对象外部调用,但可以访问到对象的私有变量。 9. **静态方法**:静态方法是属于类而不是类的实例的方法,通常用于工具函数或不需要实例化对象就...

    JavaScript学习笔记之创建对象_.docx

    在JavaScript中,对象是核心概念之一,它们是无序...学习和掌握JavaScript对象的创建、属性访问以及原型机制,对于深入理解和使用JavaScript至关重要。理解并熟练运用这些知识点,可以有效地构建复杂的应用程序和组件。

    个人Javascript学习笔记 精华版

    本资源为个人Javascript学习笔记的精华版,涵盖了Javascript的基础知识、事件处理、对象和系统函数、浏览器对象等方面的内容。下面是对每个知识点的详细说明: 1. 什么是JavaScript? JavaScript是一种脚本语言,...

    李炎恢JavaScript-pdf文档笔记

    《李炎恢JavaScript-pdf文档笔记》是一份详细记录了JavaScript编程语言基础知识至高级应用的教程,涵盖了从第一章到第三十四章的丰富内容。这个压缩包包含了一份PDF文档,旨在帮助学习者深入理解并掌握JavaScript的...

    JavaScript基础教程笔记

    ### JavaScript基础教程笔记知识点 #### 一、JavaScript简介 - **定义**:JavaScript是一种轻量级的编程语言,主要用于Web浏览器中的网页交互控制。 - **发展历史**:1995年由Netscape公司的Brendan Eich设计并...

    javascript 高级程序设计 读书笔记(3)

    《JavaScript高级程序设计》是JavaScript开发者的经典教材,它深入探讨了这门语言的核心概念和技术。这篇读书笔记主要聚焦在第三部分,这部分通常涵盖了更高级的主题,如对象、原型、闭包以及模块化等。结合提供的...

    Javascript高级程序设计---笔记归类.pdf

    这份“JavaScript高级程序设计---笔记归类.pdf”文档显然详细整理了JavaScript的关键知识点,包括ECMAScript规范、DOM操作、数据类型、运算符、流程控制语句、函数以及面向对象编程等。 首先,ECMAScript是...

    ArcGis-for-javaScript最全中文API.pdf

    ArcGIS JavaScript API 是 ESRI 提供的一种基于 JavaScript 的开发工具,允许开发者创建交互式的 Web 地图应用程序。本文将对 ArcGIS JavaScript API 进行详细的介绍,并提供多个示例来帮助读者快速上手。 一、...

    javascript笔记 超级详细 入门

    **Asynchronous JavaScript and XML (AJAX)**是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。 1. **创建XMLHttpRequest对象**: - 检测浏览器是否支持`XMLHttpRequest`。 ```javascript var ...

    Javascript高级程序设计---笔记.pdf

    这份笔记主要基于《JavaScript高级程序设计》这本书,旨在深入探讨ECMAScript、DOM操作以及各种编程特性。 首先,ECMAScript是JavaScript的基础,它定义了语言的语法和基本对象。学习纪要中提到的ECMAScript部分...

    《李炎恢Javascript笔记》+源码

    《李炎恢Javascript笔记》是一本深入浅出的JavaScript学习资料,它涵盖了JavaScript的基础到实践应用的诸多方面。这本书的特点是将复杂的编程概念分解为易于理解的小知识点,并且提供了源码示例,使得读者能够更好地...

    韩顺平 javascript 笔记 js面向对象 笔记 韩顺平 完整版

    在韩顺平的JavaScript笔记中,他深入讲解了JS面向对象编程的各个方面,包括变量的作用域、对象引用、this关键字的使用以及对象的方法。 首先,变量的作用域在JavaScript中是一个关键概念。带var和不带var声明的变量...

    李立超JavaScript基础篇笔记

    JavaScript,简称JS,是由Brendan Eich在1995年创造的一种高级编程语言,最初目的是为了增强网页的交互性,特别是在前端进行表单验证。JavaScript不是Java的子集,两者之间没有直接关联。JS起初名为LiveScript,但在...

    JavaScript学习笔记

    JavaScript是一种广泛应用于网页和网络应用的脚本语言,它在浏览器端...通过阅读"JavaScript从入门到精通学习笔记.docx"文档和解压"Chapter2.rar",你将深入探索以上各个知识点,逐步成为一名熟练的JavaScript开发者。

    前端学习笔记整理:HTML, CSS, JavaScript, Web 性能优化, 工具, 框架, 资源.zip

    前端学习笔记整理:HTML, CSS, JavaScript, Web 性能优化, 工具, 框架, 资源 前端学习笔记整理:HTML, CSS, JavaScript, Web 性能优化, 工具, 框架, 资源 前端学习笔记整理:HTML, CSS, JavaScript, Web 性能优化, ...

Global site tag (gtag.js) - Google Analytics