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转换字符串为dom对象(字符串动态创建dom)
May 10 Javascript
JS数组的赋值介绍
Mar 10 Javascript
Bootstrap每天必学之按钮(一)
Nov 24 Javascript
在微信、支付宝、百度钱包实现点击返回按钮关闭当前页面和窗口的方法
Aug 05 Javascript
移动端使用localStorage缓存Js和css文的方法(web开发)
Sep 20 Javascript
jQuery中$.ajax()方法参数解析
Oct 22 Javascript
微信小程序 欢迎页面的制作(源码下载)
Jan 09 Javascript
easyui combogrid实现本地模糊搜索过滤多列
May 13 Javascript
实例讲解v-if和v-show的区别
Jan 31 Javascript
layui select 禁止点击的实现方法
Sep 05 Javascript
js+canvas实现五子棋小游戏
Aug 02 Javascript
JavaScript 判断浏览器是否是IE
Feb 19 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 clearstatcache()函数详解
2010/03/02 PHP
php等比例缩放图片及剪切图片代码分享
2016/02/13 PHP
Laravel5.1数据库连接、创建数据库、创建model及创建控制器的方法
2016/03/29 PHP
PHP实现超简单的SSL加密解密、验证及签名的方法示例
2017/08/28 PHP
看了就知道什么是JSON
2007/12/09 Javascript
通过Mootools 1.2来操纵HTML DOM元素
2009/09/15 Javascript
JavaScript 嵌套函数指向this对象错误的解决方法
2010/03/15 Javascript
JS的反射问题
2010/04/07 Javascript
JavaScript/jQuery 表单美化插件小结
2012/02/14 Javascript
nodejs win7下安装方法
2012/05/24 NodeJs
正负小数点后两位浮点数实现原理及代码
2013/09/06 Javascript
jquery判断小数点两位和自动删除小数两位后的数字
2014/03/19 Javascript
查找页面中所有类为test的结点的方法
2014/03/28 Javascript
JS实现网页标题随机显示名人名言的方法
2015/11/03 Javascript
简单总结JavaScript中的String字符串类型
2016/05/26 Javascript
AngularJS包括详解及示例代码
2016/08/17 Javascript
各式各样的导航条效果css3结合jquery代码实现
2016/09/17 Javascript
使用Angular缓存父页面数据的方法
2017/01/03 Javascript
jQuery鼠标移动图片上实现放大效果
2017/06/25 jQuery
老生常谈js数据类型
2017/08/03 Javascript
JS实现图片旋转动画效果封装与使用示例
2018/07/09 Javascript
微信小程序中如何使用flyio封装网络请求
2019/07/03 Javascript
vue组件中节流函数的失效的原因和解决方法
2020/12/02 Vue.js
一起深入理解js中的事件对象
2021/02/06 Javascript
Python中正则表达式的详细教程
2015/04/30 Python
python开发之基于thread线程搜索本地文件的方法
2015/11/11 Python
详解Python中的__getitem__方法与slice对象的切片操作
2016/06/27 Python
对Django url的几种使用方式详解
2019/08/06 Python
Python虚拟环境virtualenv创建及使用过程图解
2020/12/08 Python
德国在线购买葡萄酒网站:Geile Weine
2019/09/24 全球购物
早会主持词
2014/03/17 职场文书
房产委托公证书样本
2014/04/04 职场文书
个人师德师风自我剖析材料
2014/09/29 职场文书
华清池导游词
2015/02/02 职场文书
关于公司年会的开幕词
2016/03/04 职场文书
SQL Server 数据库实验课第五周——常用查询条件
2021/04/05 SQL Server