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 相关文章推荐
addRule在firefox下的兼容写法
Nov 30 Javascript
屏蔽网页右键复制和ctrl+c复制的js代码
Jan 04 Javascript
JS中for循序中延迟加载动态效果的具体实现
Aug 18 Javascript
JQuery 给元素绑定click事件多次执行的解决方法
Sep 09 Javascript
AngularJS中watch监听用法分析
Nov 04 Javascript
JavaScript之cookie技术详解
Nov 18 Javascript
jquery实现拖动效果(代码分享)
Jan 25 Javascript
微信小程序 实现点击添加移除class
Jun 12 Javascript
轻松解决JavaScript定时器越走越快的问题
May 13 Javascript
Postman无法正常返回结果问题解决
Aug 28 Javascript
vue表单验证之禁止input输入框输入空格
Dec 03 Vue.js
Webpack3+React16代码分割的实现
Mar 03 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&&mysql)三
2006/10/09 PHP
php中批量修改文件后缀名的函数代码
2011/10/23 PHP
destoon设置自定义搜索的方法
2014/06/21 PHP
PHP中PDO的事务处理分析
2016/04/07 PHP
php+jquery+html实现点击不刷新加载更多的实例代码
2016/08/12 PHP
PHP pthreads v3使用中的一些坑和注意点分析
2020/02/21 PHP
document.all还是document.getElementsByName?
2006/07/21 Javascript
在myeclipse中如何加入jquery代码提示功能
2014/06/03 Javascript
javascript在网页中实现读取剪贴板粘贴截图功能
2014/06/07 Javascript
JavaScript学习笔记之定时器
2015/01/22 Javascript
JS+CSS实现仿新浪微博搜索框的方法
2015/02/24 Javascript
JavaScript记录光标在编辑器中位置的实现方法
2016/04/22 Javascript
使用jQuery UI库开发Web界面的简单入门指引
2016/04/22 Javascript
jQuery实现的下雪动画效果示例【附源码下载】
2018/02/02 jQuery
Vue子组件向父组件通信与父组件调用子组件中的方法
2018/06/22 Javascript
vue计算属性computed、事件、监听器watch的使用讲解
2019/01/21 Javascript
layer.open 子页面弹出层向父页面传输数据的例子
2019/09/26 Javascript
javascript设计模式 ? 策略模式原理与用法实例分析
2020/04/21 Javascript
ant design vue嵌套表格及表格内部编辑的用法说明
2020/10/28 Javascript
python远程登录代码
2008/04/29 Python
忘记ftp密码使用python ftplib库暴力破解密码的方法示例
2014/01/22 Python
简单介绍利用TK在Python下进行GUI编程的教程
2015/04/13 Python
在Django框架中运行Python应用全攻略
2015/07/17 Python
Python使用Matplotlib实现雨点图动画效果的方法
2017/12/23 Python
python 实现兔子生兔子示例
2019/11/21 Python
用Python实现定时备份Mongodb数据并上传到FTP服务器
2021/01/27 Python
python中使用np.delete()的实例方法
2021/02/01 Python
CSS3制作圆形滚动进度条动画的示例
2020/11/05 HTML / CSS
水上运动奥特莱斯:Wasterports Outlet
2018/08/08 全球购物
日本整理专家Marie Kondo的官方在线商店:KonMari
2020/06/29 全球购物
下列程序在32位linux或unix中的结果是什么
2015/01/26 面试题
幼儿评语大全
2014/04/30 职场文书
主题团日活动总结
2014/06/25 职场文书
村安全生产责任书
2014/08/25 职场文书
会计实训总结范文
2015/08/03 职场文书
会计专业2019暑假实习报告
2019/06/21 职场文书