上篇博文我们说到,单独使用原型模式存在着两个弊端:一个是当原型的属性值是引用类型值的时候,在实例上操作属性会修改原型对象中的属性值;其二是不能利用传入参数创建具有特定属性值的实例。而组合使构造函数和原型模式就能克服这两个弊端。
创建对象(二)——原型模式
创建对象(一)——工厂模式和构造函数模式
对象
我们常听到一句话:“在javascript中,一切皆是对象”。那么对象是什么呢?ECMA-262把对象定义为:“无序属性的集合,其属性可以包含基本值,对象或者函数”。也就是说对象是一组没有特定顺序的值,它的每个属性或者方法都有一个名字,每个名字都映射到一个值。
Ajax
Ajax全称为“Asynchronous Javascript and XML”(异步javascript和XML),它并不是指一种单一的技术,而是有机地利用了一系列交互式网页相关的技术所形成的结合体,它的出现结束了“单击,等待”的传统交互模式,开启了无刷新更新页面的新时代。
深入理解闭包
写了快一周,终于把这个系列文写完了,总共六篇文章,虽然看起来只有最后一篇在讲闭包,但其实前面五篇都在为最后一篇打基础。
深入理解闭包(六)——闭包
终于讲到闭包了,这一路走来不容易。
从前面的博文中我们知道,js的垃圾回收机制会在某个函数的执行上下文生命周期结束后将其回收,释放内存,但是闭包的存在会阻止这一过程。
深入理解闭包(五)——作用域、作用域链和执行上下文
作用域,作用域链,执行上下文三者之间有着密切的关系,相信有一部分人对这三者只是有一种模糊的概念,今天我们就来理一理,首先我们要回顾一张图片,由这张图,你可以清楚地看到这三者分别是在什么时候创建的,其中又有什么基本的联系。
深入理解闭包(四)——执行上下文栈
执行上下文可以理解为当前代码的执行环境,JavaScript中的运行环境大概包括三种情况:
- 全局环境:JavaScript代码运行起来会首先进入该环境
- 函数环境:当函数被调用执行时,会进入当前函数中执行代码
- eval
在代码开始执行时,首先会产生一个全局执行上下文环境,调用函数时,会产生函数执行上下文环境,函数调用完成后,它的执行上下文环境以及其中的数据都会被销毁,重新回到全局执行环境,网页关闭后全局执行环境也会销毁。其实这是一个压栈出栈的过程,全局上下文环境永远在栈底,而当前正在执行的函数上下文在栈顶。
深入理解闭包(三)——确定this指向
我们在前面说过,在执行上下文创建过程中做了三件事:创建变量对象,生成作用域链,确定this指向。今天我们就来探讨一下this指向的问题。首先先回顾一下我们执行上下文的生命周期图:
深入理解闭包(二)——变量对象
执行一个函数之前,JavaScript引擎会进行准备工作,这个准备工作指的就是执行上下文,也叫执行上下文环境,也叫执行环境。
下面是一个执行上下文的周期图,其中变量对象(Variable Object)是重点之一,只有理解了它,我们才能知道一段代码的执行过程中先做什么,后做什么,我们今天就探讨一下变量对象在执行上下文生命周期中都经历了怎样的变化: