理解Javascript_10_对象模型


Posted in Javascript onOctober 16, 2010

对象模型
理解Javascript_10_对象模型
红色虚线表示隐式Prototype链。
这张对象模型图中包含了太多东西,不少地方需要仔细体会,可以写些测试代码进行验证。彻底理解了这张图,对JavaScript语言的了解也就差不多了。下面是一些补充说明:
1. 图中有好几个地方提到build-in Function constructor,这是同一个对象,可以测试验证:

//Passed in FF2.0, IE7, Opera9.25, Safari3.0.4 
Function==Function.constructor //result: true 
Function==Function.prototype.constructor //result: true 
Function==Object.constructor //result: true 
//Function also equals to Number.constructor, String.constructor, Array.constructor, RegExp.constructor, etc. 
function fn(){} 
Function==fn.constructor //result: true

这说明了几个问题: Function指向系统内置的函数构造器(build-in Function constructor);Function具有自举性;系统中所有函数都是由Function构造。

2. 左下角的obj1, obj2...objn范指用类似这样的代码创建的对象: function fn1(){}; var obj1=new fn1();这些对象没有本地constructor方法,但它们将从Prototype链上得到一个继承的constructor方法,即fn.prototype.constructor,从函数对象的构造过程可以知道,它就是fn本身了。

3.右下角的obj1, obj2...objn范指用类似这样的代码创建的对象: var obj1=new Object();或var obj1={};或var obj1=new Number(123);或obj1=/\w+/;等等。所以这些对象Prototype链的指向、从Prototype链继承而来的 constructor的值(指它们的constructor是build-in Number constructor还是build-in Object constructor等)等依赖于具体的对象类型。另外注意的是,var obj=new Object(123);这样创建的对象,它的类型仍然是Number,即同样需要根据参数值的类型来确定。同样它们也没有本地constructor,而是从Prototype链上获得继承的constructor方法,即build-in *** constructor,具体是哪一个由数据类型确定。
示例代码

//自定义对象代表,对应Javascript Object Model中的use defined functions 
function Foo(){} 
//自定义对象创建的对象实例的代表,对应Javascript Object Model中的objects that created by user defined functions 
var foo = new Foo(); 
//String内置函数代表 
//str为内置函数创建的对象实例的代表,对应Javascript Object Model中的objects that created by build-in constructors 
var str = new String("string");

内存展现
理解Javascript_10_对象模型
你会发现,它和《理解Javascript_09_Function与Object》中的内存分析图是一样的,为什么呢?在《数据模型》中提到过,内置对象都可以看作是函数的派生类型,例如Number instanceof Function为true,Number instanceof Object为true。在这个意义上,可以将它们跟用户定义的函数等同看待。所以内置对象和自定义对象的创建流程是一样的。

在篇博文是在理解了《Function与Object》的基础上写的,因此要理解本文必须理解Function与Object的关系!

最后写一点感言:令人发狂的理论!

Javascript 相关文章推荐
ie6下png图片背景不透明的解决办法使用js实现
Jan 11 Javascript
eclipse如何忽略js文件报错(附图)
Oct 30 Javascript
js获取电脑分辨率的思路及操作
Nov 22 Javascript
Javascript 按位与赋值运算符 (&=)使用介绍
Feb 04 Javascript
JavaScript使用Range调色及透明度实例
Sep 25 Javascript
js移动焦点到最后位置的简单方法
Nov 25 Javascript
js获取一组日期中最近连续的天数
May 25 Javascript
用原生JS实现简单的多选框功能
Jun 12 Javascript
Webpack执行命令参数详解
Jun 17 Javascript
VUE 实现滚动监听 导航栏置顶的方法
Sep 11 Javascript
Vue+Express实现登录状态权限验证的示例代码
May 05 Javascript
vue-cropper插件实现图片截取上传组件封装
May 27 Vue.js
理解Javascript_09_Function与Object
Oct 16 #Javascript
理解Javascript_08_函数对象
Oct 15 #Javascript
javascript instanceof 内部机制探析
Oct 15 #Javascript
理解Javascript_07_理解instanceof实现原理
Oct 15 #Javascript
JavaScript 对象模型 执行模型
Oct 15 #Javascript
理解Javascript_06_理解对象的创建过程
Oct 15 #Javascript
JavaScript聚焦于第一个字段的代码
Oct 15 #Javascript
You might like
php生成EXCEL的东东
2006/10/09 PHP
fleaphp rolesNameField bug解决方法
2011/04/23 PHP
ThinkPHP文件上传实例教程
2014/08/22 PHP
javascript void(0)的妙用
2009/10/21 Javascript
javascript 跨浏览器开发经验总结(五) js 事件
2010/05/19 Javascript
jquery必须知道的一些常用特效方法及使用示例(整理)
2013/06/24 Javascript
javascript替换已有元素replaceChild()使用介绍
2014/04/03 Javascript
jquery的总体架构分析及实现示例详解
2014/11/08 Javascript
node.js中的fs.futimesSync方法使用说明
2014/12/17 Javascript
jQuery学习笔记之jQuery+CSS3的浏览器兼容性
2015/01/19 Javascript
Bootstrap modal使用及点击外部不消失的解决方法
2016/12/13 Javascript
javascript刷新父页面方法汇总详解
2019/10/10 Javascript
vuex存储token示例
2019/11/11 Javascript
js实现时分秒倒计时
2019/12/03 Javascript
JavaScript进阶(三)闭包原理与用法详解
2020/05/09 Javascript
[01:15:00]LGD vs Mineski Supermajor 胜者组 BO3 第一场 6.5
2018/06/06 DOTA
Python中的ConfigParser模块使用详解
2015/05/04 Python
Python网络爬虫中的同步与异步示例详解
2018/02/03 Python
python topN 取最大的N个数或最小的N个数方法
2018/06/04 Python
python可视化实现代码
2019/01/15 Python
python整合ffmpeg实现视频文件的批量转换
2019/05/31 Python
pyqt5中QThread在使用时出现重复emit的实例
2019/06/21 Python
Django  ORM 练习题及答案
2019/07/19 Python
10分钟教你用python动画演示深度优先算法搜寻逃出迷宫的路径
2019/08/12 Python
django中上传图片分页三级联动效果的实现代码
2019/08/30 Python
导入tensorflow时报错:cannot import name 'abs'的解决
2019/10/10 Python
Django中使用MySQL5.5的教程
2019/12/18 Python
美国体育用品商店:Rally House(NCAA、NFL、MLB、NBA、NHL和MLS)
2018/01/03 全球购物
请用Java实现列出某个目录下的所有文件
2013/09/23 面试题
师范学院毕业生求职信范文
2013/12/26 职场文书
信息专业大学生自我评价分享
2014/01/17 职场文书
演讲比赛获奖感言
2014/02/02 职场文书
乡党委干部党的群众路线教育实践活动个人对照检查材料思想汇报
2014/10/01 职场文书
2016新年慰问信范文
2015/03/25 职场文书
初中班主任工作随笔
2015/08/15 职场文书
Python NumPy灰度图像的压缩原理讲解
2021/08/04 Python