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函数里作用域链所包含的对象。(只是部分了)
相关新闻>>
- Javascript 兼容 IE6、IE7、FF 的“加入收藏”“设为首页”
- 好好学一遍JavaScript 笔记(一)——基础中的基础
- 好好学一遍JavaScript 笔记(二)——encode、数组、对象创建
- 好好学一遍JavaScript 笔记(三)——StringBuffer、prototype
- 好好学一遍javaScript 笔记(四)——Attribute、HTML元素、文档碎
- 好好学一遍JavaScript 笔记(五)——正则表达式基础
- 好好学一遍JavaScript 笔记(六)——正则表达式基础二
- 好好学一遍JavaScript 笔记(七)——RegExp对象与常用正则
- 好好学一遍JavaScript 笔记(八)——冒泡型事件、捕获型事件
- JavaScript详解
- 发表评论
-
- 最新评论 更多>>