理解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 相关文章推荐
javascript Ext JS 状态默认存储时间
Feb 15 Javascript
javascript 特殊字符串
Feb 25 Javascript
基于Jquery 解决Ajax请求的页面 浏览器后退前进功能,页面刷新功能实效问题
Dec 11 Javascript
Tab页界面 用jQuery及Ajax技术实现(php后台)
Oct 12 Javascript
js加强的经典分页实例
Mar 15 Javascript
JavaScript中使用Object.prototype.toString判断是否为数组
Apr 01 Javascript
kindeditor编辑器点中图片滚动条往上顶的bug
Jul 05 Javascript
JS实现兼容性好,带缓冲的动感网页右键菜单效果
Sep 18 Javascript
详解React-Native全球化多语言切换工具库react-native-i18n
Nov 03 Javascript
小程序视频或音频自定义可拖拽进度条的示例代码
Sep 30 Javascript
通过实例了解JS执行上下文运行原理
Jun 17 Javascript
简单了解JavaScript作用域
Jul 31 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/03/02 国漫
香妃
2021/03/03 冲泡冲煮
截获网站title标签之家内容的例子
2006/10/09 PHP
php使用filter过滤器验证邮箱 ipv6地址 url验证
2013/12/25 PHP
PHP模板引擎Smarty内建函数详解
2016/04/11 PHP
php编译安装php-amq扩展简明教程
2016/06/25 PHP
Windows2003下php5.4安装配置教程(Apache2.4)
2016/06/30 PHP
windows7配置Nginx+php+mysql的详细教程
2016/09/04 PHP
javascript 按回车键相应按钮提交事件
2009/11/02 Javascript
javascript 命名规则 变量命名规则
2010/02/25 Javascript
JS实现仿新浪微博发布内容为空时提示功能代码
2015/08/19 Javascript
JS实现淡蓝色简洁竖向Tab点击切换效果
2015/10/06 Javascript
javascript bom是什么及bom和dom的区别
2015/11/26 Javascript
使用Javascript实现选择下拉菜单互移并排序
2016/02/23 Javascript
nodejs中向HTTP响应传送进程的输出
2017/03/19 NodeJs
Node.js Mongodb 密码特殊字符 @的解决方法
2017/04/11 Javascript
Angular搜索场景中使用rxjs的操作符处理思路
2018/05/30 Javascript
swiper在angularjs中使用循环轮播失效的解决方法
2018/09/27 Javascript
vue 中基于html5 drag drap的拖放效果案例分析
2018/11/01 Javascript
基于React Native 0.52实现轮播图效果
2020/08/25 Javascript
JS内置对象和Math对象知识点详解
2020/04/03 Javascript
[01:07:19]2018DOTA2亚洲邀请赛 4.5 淘汰赛 Mineski vs VG 第一场
2018/04/06 DOTA
Python 开发Activex组件方法
2009/11/08 Python
详细介绍Python语言中的按位运算符
2013/11/26 Python
Python中SOAP项目的介绍及其在web开发中的应用
2015/04/14 Python
Python实现针对含中文字符串的截取功能示例
2017/09/22 Python
Python中enumerate函数代码解析
2017/10/31 Python
Python使用monkey.patch_all()解决协程阻塞问题
2020/04/15 Python
新西兰最大、占有率最高的综合性药房:PharmacyDirect药房中文网
2020/11/03 全球购物
公司年会晚宴演讲稿
2014/01/06 职场文书
建筑系毕业生自我鉴定
2014/01/24 职场文书
大学毕业感言200字
2014/03/09 职场文书
学习作风建设心得体会
2014/10/22 职场文书
2015年教师工作总结范文
2015/03/31 职场文书
小学四年级班主任工作经验交流材料
2015/11/02 职场文书
Java存储没有重复元素的数组
2022/04/29 Java/Android