理解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 相关文章推荐
jQuery Lightbox 图片展示插件使用说明
Apr 25 Javascript
jQuery源码分析-05异步队列 Deferred 使用介绍
Nov 14 Javascript
javascript实现简单查找与替换的方法
Jul 22 Javascript
程序员必知35个jQuery 代码片段
Nov 05 Javascript
微信小程序 图片上传实例详解
May 05 Javascript
jQuery实现表单动态添加数据并提交的方法
Jul 19 jQuery
layer弹出层父子页面事件相互调用方法
Aug 17 Javascript
jquery获取select选中值的文本,并赋值给另一个输入框的方法
Aug 21 jQuery
Vue-component全局注册实例
Sep 06 Javascript
从零开始搭建vue移动端项目到上线的步骤
Oct 15 Javascript
如何让微信小程序页面之间的通信不再变困难
Jun 03 Javascript
Vue 3.0双向绑定原理的实现方法
Oct 23 Javascript
理解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
2020年4月新番动漫目录 官方宣布4月播出的作品一览
2020/03/08 日漫
php json_encode奇怪问题说明
2011/09/27 PHP
php网页病毒清除类
2014/12/08 PHP
PHP实现多维数组转字符串和多维数组转一维数组的方法
2015/08/08 PHP
PHP静态成员变量和非静态成员变量详解
2017/02/14 PHP
Laravel框架查询构造器简单示例
2019/05/08 PHP
Laravel Eloquent分表方法并使用模型关联的实现
2019/11/25 PHP
laravel 框架执行流程与原理简单分析
2020/02/01 PHP
在IE下:float属性会影响offsetTop的取值
2006/12/22 Javascript
FormValid0.5版本发布,带ajax自定义验证例子
2007/08/17 Javascript
javascript如何动态加载表格与动态添加表格行
2013/11/27 Javascript
JS删除字符串中重复字符方法
2014/03/09 Javascript
NodeJS Express框架中处理404页面一个方式
2014/05/28 NodeJs
Node.js node-schedule定时任务隔多少分钟执行一次的方法
2015/02/10 Javascript
AngularJS学习笔记之依赖注入详解
2016/05/16 Javascript
web前端vue filter 过滤器
2018/01/12 Javascript
JS数组求和的常用方法实例小结
2019/01/07 Javascript
微信小程序实现下滑到底部自动翻页功能
2020/03/07 Javascript
vue实现编辑器键盘抬起时内容跟随光标距顶位置向上滚动效果
2020/05/28 Javascript
python使用内存zipfile对象在内存中打包文件示例
2014/04/30 Python
python实现文件分组复制到不同目录的例子
2014/06/04 Python
Python线程池模块ThreadPoolExecutor用法分析
2018/12/28 Python
python Dijkstra算法实现最短路径问题的方法
2019/09/19 Python
python GUI库图形界面开发之PyQt5打印控件QPrinter详细使用方法与实例
2020/02/28 Python
英国领先的男士服装和时尚零售商:Burton
2017/01/09 全球购物
abstract是什么意思
2012/02/12 面试题
财务方面个人工作的自我评价
2013/12/28 职场文书
初二物理教学反思
2014/01/29 职场文书
企业安全生产责任书
2014/04/14 职场文书
建议书的格式
2014/05/12 职场文书
祖国在我心中演讲稿(小学生)
2014/09/23 职场文书
妇产科护理心得体会
2016/01/22 职场文书
创业计划书之蛋糕店
2019/08/29 职场文书
原生JS实现飞机大战小游戏
2021/06/09 Javascript
用Python实现屏幕截图详解
2022/01/22 Python
MySQL优化及索引解析
2022/03/17 MySQL