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 相关文章推荐
jquery 简单导航实现代码
Sep 11 Javascript
ExtJs扩展之GroupPropertyGrid代码
Mar 05 Javascript
基于jquery的地址栏射击游戏代码
Mar 10 Javascript
jquery mobile事件多次绑定示例代码
Sep 13 Javascript
jQuery使用attr()方法同时设置多个属性值用法实例
Mar 26 Javascript
JS iFrame加载慢怎么解决
May 13 Javascript
jQuery操作动态生成的内容的方法
May 28 Javascript
jQuery如何封装输入框插件
Aug 19 Javascript
jQuery ajax的功能实现方法详解
Jan 06 Javascript
vuejs使用FormData实现ajax上传图片文件
Aug 08 Javascript
Layui多选只有最后一个值的解决方法
Sep 02 Javascript
vue-element-admin 菜单标签失效的解决方式
Nov 12 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
比较discuz和ecshop的截取字符串函数php版
2012/09/03 PHP
解析WordPress中函数钩子hook的作用及基本用法
2015/12/22 PHP
PHP解决中文乱码
2017/04/28 PHP
php框架CodeIgniter主从数据库配置方法分析
2018/05/25 PHP
jquery checkbox,radio是否选中的判断代码
2010/03/20 Javascript
JQuery的read函数与js的onload不同方式实现
2013/03/18 Javascript
jquery实现html页面 div 假分页有原理有代码
2014/09/06 Javascript
node.js中的fs.stat方法使用说明
2014/12/16 Javascript
javascript实现的淘宝旅行通用日历组件用法实例
2015/08/03 Javascript
jQuery实现验证年龄简单思路
2016/02/24 Javascript
jquery实现一个简单的表单验证实例
2016/03/30 Javascript
深入理解JavaScript中的块级作用域、私有变量与模块模式
2016/10/31 Javascript
javascript中BOM基础知识总结
2017/02/14 Javascript
JS实现控制图片显示大小的方法【图片等比例缩放功能】
2017/02/18 Javascript
jQuery实现字体颜色渐变效果的方法
2017/03/29 jQuery
用React实现一个完整的TodoList的示例代码
2017/10/30 Javascript
详解利用Angular实现多团队模块化SPA开发框架
2017/11/27 Javascript
浅谈Vue初学之props的驼峰命名
2018/07/19 Javascript
7个好用的JavaScript技巧分享(译)
2019/05/07 Javascript
VUE实现自身整体组件销毁的示例代码
2020/01/13 Javascript
js验证密码强度解析
2020/03/18 Javascript
Python 制作糗事百科爬虫实例
2016/09/22 Python
Python Django框架模板渲染功能示例
2019/11/08 Python
Python的in,is和id函数代码实例
2020/04/18 Python
Manjaro、pip、conda更换国内源的方法
2020/11/17 Python
Python 多进程原理及实现
2020/12/21 Python
Pat McGrath Labs官网:世界上最有影响力的化妆师推出的彩妆品牌
2018/01/07 全球购物
写演讲稿要注意的六件事
2014/01/14 职场文书
英语生日邀请函
2014/01/23 职场文书
企业节能减排实施方案
2014/03/19 职场文书
南京青奥会口号
2014/06/12 职场文书
个人工作表现评价材料
2014/09/21 职场文书
2014流动人口计划生育工作总结
2014/12/20 职场文书
Python如何识别银行卡卡号?
2021/06/10 Python
如何利用Python实现n*n螺旋矩阵
2022/01/18 Python
Golang jwt身份认证
2022/04/20 Golang