javascript prototype,executing,context,closure


Posted in Javascript onDecember 24, 2008

要学好JavaScript,有几个基本概念必须搞清楚:prototype,executing,context,closure。
Prototype

在JavaScript语言中,通常使用Prototype来实现OO。在这里,我们不对JavaScript的OO实现进行过多的探讨,着重来看一下JS中对象的内存模型。在开始之前,需要先明确以下几点:
1. JS中,存在以下几种数据类型:string,number,boolean,object,function(注意:首字母均为小写)。
2 “Object”, “String”, “Date”等内置数据类型,在JS中实际上是函数名称(使用"alert(typeof Object)"可以验证,输出为"function")。我们通常指的类型为"Date"的数据类型,实际上是通过"new Date"所产生的对象。
3. 在JavaScript中,对象都是associative array (hash table),可以动态指定对象的property。
4. 在Firefox中可以使用"__proto__"属性来查看一个对象的"prototype"。

下面我们来看一个简单的例子:

function Person() { this.age = 10; this.name = "test";}Person.prototype = new Object;var p = new Person;alert(p); // output "[object Object]"alert(p.__proto__); // output "[object Object]"

可以看出Person数据类型具有一个“prototype”,如果更改这个prototype,会影响到所有已经产生的Person类型的对象,同时也会影响到以后建立的Person类型的对象。如果指定一个function的prototype属性,则所有使用该function生成的对象实例中(使用new操作符)都具有该prototype,在Firefox 中,可以使用"__proto__"属性访问。

通常情况下,我们讲JS中的对象都继承Object数据类型,这是如何体现的呢?我们把以上的程序稍微修改一下:

function Person() { this.age = 10; this.name = "test";}var p = new Person;alert(p); // output "[object Object]"alert(p.__proto__); // output "[object Object]"alert(p.__proto__.__proto__); // output "[object Object]"alert(p.__proto__.__proto__ == Object.prototype); // output "true"alert(p.__proto__.__proto__.__proto__); // output "null"

由以上程序可以看到,Person的"prototype"(在这里,没有明确指定Person.prototype, 而是使用缺省值)的"prototype" (p.__proto__.__proto__)正是Object.prototype, Object.prototype是prototype chain的终点(其自己的祖先为null)。

在JS中,Object是function,同时,所有function的实例,也都是Object。请看如下程序:

/* Object, Function都是function数据类型 */alert(typeof Object); // output "function"alert(typeof Function); // output "function"/* Function的prototype是一个空function */alert(Function.prototype); // output "function() {}"alert(Function.__proto__ == Function.prototype); // output "true"/* function是object, 其prototype chain的终点是Object.prototype */alert(Function.__proto__.__proto__ == Object.prototype); //output "true"/* Object是function的实例 */ alert(Object.__proto__ == Function.prototype); // output "true"alert(Object.__proto__.__proto__ == Object.prototype); // output "true"改变Function.prototype会影响到“Object”,改变Object.prototype会影响到所有function的实例。

Javascript 相关文章推荐
javascript游戏开发之《三国志曹操传》零部件开发(二)人物行走的实现
Jan 23 Javascript
jQuery:delegate中select()不起作用的解决方法(实例讲解)
Jan 26 Javascript
checkbox批量选中,获取选中项的值的简单实例
Jun 28 Javascript
jquery 判断selection range 是否在容器中的简单实例
Aug 02 Javascript
jQuery右下角悬浮广告实例
Oct 17 Javascript
Node.js开启Https的实践详解
Oct 25 Javascript
JS实现的DIV块来回滚动效果示例
Feb 07 Javascript
教你快速搭建Node.Js服务器的方法教程
Mar 30 Javascript
JavaScript中变量、指针和引用功能与操作示例
Aug 04 Javascript
Layui数据表格判断编辑输入的值,是否为我需要的类型详解
Oct 26 Javascript
Vue axios与Go Frame后端框架的Options请求跨域问题详解
Mar 03 Javascript
vue跳转页面的几种方法(推荐)
Mar 26 Javascript
JavaScript 事件参考手册
Dec 24 #Javascript
javascript XML数据显示为HTML一例
Dec 23 #Javascript
window.location和document.location的区别分析
Dec 23 #Javascript
javascript 硬盘序列号+其它硬件信息
Dec 23 #Javascript
js 解决“options为空或不是对象”
Dec 22 #Javascript
javascript 动态参数判空操作
Dec 22 #Javascript
Javascript 布尔型分析
Dec 22 #Javascript
You might like
使用PHP的日期与时间函数技巧
2008/04/24 PHP
php中url函数介绍及使用示例
2014/02/13 PHP
php遍历文件夹下的所有文件和子文件夹示例
2014/03/20 PHP
Yii框架关联查询with用法分析
2014/12/02 PHP
php分页原理 分页代码 分页类制作教程
2016/09/23 PHP
根据鼠标的位置动态的控制层的位置
2009/11/24 Javascript
js 禁止选择功能实现代码(兼容IE/Firefox)
2010/04/23 Javascript
js关于字符长度限制的问题示例探讨
2014/01/24 Javascript
jQuery实现菜单式图片滑动切换
2015/03/14 Javascript
jQuery实现类似老虎机滚动抽奖效果
2015/08/06 Javascript
js+css简单实现网页换肤效果
2015/12/29 Javascript
学习JavaScript设计模式之迭代器模式
2016/01/19 Javascript
JS正则表达式之非捕获分组用法实例分析
2016/12/28 Javascript
ionic实现底部分享功能
2017/05/11 Javascript
angular2组件中定时刷新并清除定时器的实例讲解
2018/08/31 Javascript
微信小程序冒泡事件及其阻止方法实例分析
2018/12/06 Javascript
微信小程序加载机制及运行机制图解
2019/11/27 Javascript
原生JS实现贪吃蛇小游戏
2020/03/09 Javascript
Python遍历指定文件及文件夹的方法
2015/05/09 Python
使用Mixin设计模式进行Python编程的方法讲解
2016/06/21 Python
python基础之入门必看操作
2017/07/26 Python
Python sklearn KFold 生成交叉验证数据集的方法
2018/12/11 Python
Python创建空列表的字典2种方法详解
2020/02/13 Python
Python如何使用bokeh包和geojson数据绘制地图
2020/03/21 Python
如何理解Python中包的引入
2020/05/29 Python
Python __slots__的使用方法
2020/11/15 Python
英国最大的在线奢侈手表零售商:Jura Watches
2018/01/29 全球购物
美国流行背包品牌:JanSport(杰斯伯)
2018/03/02 全球购物
Priority Pass机场贵宾室会籍计划:全球超过1200间机场贵宾室
2018/08/26 全球购物
大专毕业生简历的自我评价
2013/10/20 职场文书
会计岗位职责
2013/11/08 职场文书
地震捐款倡议书
2014/08/29 职场文书
公务员政审材料范文
2014/12/23 职场文书
民事纠纷协议书
2016/03/23 职场文书
mysql 生成连续日期及变量赋值
2022/03/20 MySQL
Python可视化神器pyecharts之绘制地理图表练习
2022/07/07 Python