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 如何动态添加、删除class样式方法介绍
Nov 07 Javascript
javascript读取xml实现javascript分页
Dec 13 Javascript
jQuery ajax调用WCF服务实例
Jul 16 Javascript
莱鸟介绍window.print()方法
Jan 06 Javascript
使用angularjs创建简单表格
Jan 21 Javascript
JavaScript面试题大全(推荐)
Sep 22 Javascript
jQuery Ajax File Upload实例源码
Dec 12 Javascript
浅析jsopn跨域请求原理及cors(跨域资源共享)的完美解决方法
Feb 06 Javascript
Vue.2.0.5实现Class 与 Style 绑定的实例
Jun 20 Javascript
分析JavaScript数组操作难点
Dec 18 Javascript
微信小程序实现发送模板消息功能示例【通过openid推送消息给用户】
May 05 Javascript
node.JS二进制操作模块buffer对象使用方法详解
Feb 06 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/12/14 PHP
通过PHP CLI实现简单的数据库实时监控调度
2009/07/01 PHP
PHP基础知识回顾
2012/08/16 PHP
php函数传值的引用传递注意事项分析
2016/06/25 PHP
PHP strcmp()和strcasecmp()的区别实例
2016/11/05 PHP
Yii框架弹出框功能示例
2017/01/07 PHP
Javascript 类与静态类的实现(续)
2010/04/02 Javascript
js内存泄露的几种情况详细探讨
2013/05/31 Javascript
jquery动态改变div宽度和高度
2015/02/09 Javascript
javascript实现类似百度分享功能的方法
2015/07/27 Javascript
jQuery获取cookie值及删除cookie用法实例
2016/04/15 Javascript
Bootstrap布局方式详解
2016/05/27 Javascript
BootStrap智能表单实战系列(六)表单编辑页面的数据绑定
2016/06/13 Javascript
jQuery弹出遮罩层效果完整示例
2016/09/13 Javascript
jQuery实现的右下角广告窗体跟随效果示例
2016/09/16 Javascript
详解Javascript中DOM的范围
2017/02/13 Javascript
vue2.0中goods选购栏滚动算法的实现代码
2017/05/17 Javascript
微信小程序实现全局搜索代码高亮的示例
2018/03/30 Javascript
小程序ios音频播放没声音问题的解决
2018/07/11 Javascript
浅谈Webpack核心模块tapable解析
2018/09/11 Javascript
详解关于Vue2.0路由开启keep-alive时需要注意的地方
2018/09/18 Javascript
layui 实现table翻页滚动条位置保持不变的例子
2019/09/05 Javascript
python分析网页上所有超链接的方法
2015/05/08 Python
Python如何为图片添加水印
2016/11/25 Python
python监控进程脚本
2018/04/12 Python
python实现简易学生信息管理系统
2020/04/05 Python
python打印文件的前几行或最后几行教程
2020/02/13 Python
python 项目目录结构设置
2020/02/14 Python
12岁生日感言
2014/01/21 职场文书
大学生村官承诺书
2014/03/28 职场文书
大学生党员自我批评思想汇报
2014/10/10 职场文书
房屋授权无偿使用证明
2014/11/29 职场文书
2014年外贸业务员工作总结
2014/12/11 职场文书
交通处罚决定书
2015/06/24 职场文书
TypeScript 使用 Tuple Union 声明函数重载
2022/04/07 Javascript
常用的文件对应的MIME类型汇总
2022/04/26 HTML / CSS