理解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中的对象创建 实例附注释
Feb 08 Javascript
Javascript前端UI框架Kit使用指南之Kitjs简介
Nov 28 Javascript
js鼠标点击图片实现随机变换图片的方法
Feb 16 Javascript
jquery插件validation实现验证身份证号等
Jun 04 Javascript
javascript字符串循环匹配实例分析
Jul 17 Javascript
基于jQuery实现的菜单切换效果
Oct 16 Javascript
Vue.js学习笔记之 helloworld
Aug 14 Javascript
vue双向绑定的简单实现
Dec 22 Javascript
JavaScript轻松创建级联函数的方法示例
Feb 10 Javascript
vue删除html内容的标签样式实例
Sep 13 Javascript
js取0-9随机取4个数不重复的数字代码实例
Mar 27 Javascript
利用原生JS实现data方法示例代码
May 28 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
PHP垃圾回收机制简单说明
2010/07/22 PHP
Ubuntu 16.04下安装PHP 7过程详解
2017/03/28 PHP
js 判断文件类型并控制表单提交示例代码
2013/11/14 Javascript
利用JS判断用户是否上网(连接网络)
2013/12/23 Javascript
jquery对单选框,多选框,文本框等常见操作小结
2014/01/08 Javascript
jQuery+ajax实现鼠标单击修改内容的思路
2014/06/29 Javascript
基于jQuery实现的美观星级评论打分组件代码
2015/10/30 Javascript
js实现文字闪烁特效的方法
2015/12/17 Javascript
JavaScript判断数组重复内容的两种方法(推荐)
2016/06/06 Javascript
Bootstrap轮播图的使用和理解4
2016/12/14 Javascript
详解nodejs 文本操作模块-fs模块(三)
2016/12/22 NodeJs
js模拟F11页面全屏显示
2019/09/17 Javascript
详解Vue后台管理系统开发日常总结(组件PageHeader)
2019/11/01 Javascript
Python模拟登录验证码(代码简单)
2016/02/06 Python
Django实现自定义404,500页面教程
2017/03/26 Python
Python在图片中添加文字的两种方法
2017/04/29 Python
Python使用matplotlib简单绘图示例
2018/02/01 Python
Python实现的查询mysql数据库并通过邮件发送信息功能
2018/05/17 Python
django框架使用orm实现批量更新数据的方法
2019/06/21 Python
Django文件存储 默认存储系统解析
2019/08/02 Python
python用TensorFlow做图像识别的实现
2020/04/21 Python
keras 使用Lambda 快速新建层 添加多个参数操作
2020/06/10 Python
Python爬虫headers处理及网络超时问题解决方案
2020/06/19 Python
利用keras使用神经网络预测销量操作
2020/07/07 Python
Python面向对象实现方法总结
2020/08/12 Python
Python爬虫开发与项目实战
2020/12/16 Python
英国第一蛋白粉品牌:Myprotein
2016/09/14 全球购物
Sephora丝芙兰澳洲官方网站:国际知名化妆品购物
2016/10/27 全球购物
JSF面试题:Jsf中导航的标签是什么
2013/04/20 面试题
文职个人求职信范文
2013/09/23 职场文书
会计学财务管理专业个人的自我评价
2013/10/19 职场文书
初一体育教学反思
2014/01/29 职场文书
工作表现自我评价
2014/02/08 职场文书
任命书怎么写
2015/03/02 职场文书
2015年安康杯竞赛活动总结
2015/03/26 职场文书
详解Java实践之抽象工厂模式
2021/06/18 Java/Android