JavaScript对象创建及继承原理实例解剖


Posted in Javascript onFebruary 28, 2013

对象创建
当一个函数对象被创建时候,Function构造器产生的函数对象会运行类似这样的代码:

this.prototype={constructor:this};

假设函数F
F用new方式构造对象时,对象的constructor被设置成这个F.prototype.constructor
如果函数在创建对象前修改了函数的prototype,会影响创建出来对象的construtor属性
如:
function F(){}; 
F.prototype={constructor:'1111'}; 
var o=new F();//o.constructor===‘1111' true

继承原理
JavaScript中的继承是使用原型链的机制,每个函数的实例都共享构造函数prototype属性中定义的数据,要使一个类继承另一个,需要把父函数实例赋值到子函数的prototype属性。并且在每次new实例对象时,对象的私有属性__proto__会被自动连接到构造函数的prototype。
instanceof就是查找实例对象的私有prototype属性链来确定是否是指定对象的实例
具体实例
//instanceof实现 
function Myinstanceof(obj,type) 
{ 
var proto=obj.__proto__; 
while(proto) 
{ 
if(proto ===type.prototype)break; 
proto=proto.__proto__; 
} 
return proto!=null; 
} 
function View(){} 
function TreeView(){} 
TreeView.prototype=new View();//TreeView.prototype.__proto__=TreeView.prototype 自动完成 
TreeView.prototype.constructor=TreeView;//修正constructor 
var view=new TreeView();//view.__proto__=TreeView.prototype 自动完成 
alert(view instanceof View); //true 查找到view.__proto__.__proto__时找到 
alert(view instanceof TreeView); //true 查找到view.__proto__时找到 
alert(Myinstanceof(view,View)); //true 
alert(Myinstanceof(view,TreeView)); //true

上面自定义的Myinstanceof就是自己实现的一个instanceof功能的函数,由于IE内核实例存储prototype不是__proto__,所以Myinstanceof会无法通过,其他浏览器上应该都没有问题
Javascript 相关文章推荐
Extjs4 关于Store的一些操作(加载/回调/添加)
Apr 18 Javascript
js遍历子节点子元素附属性及方法
Aug 19 Javascript
对比分析AngularJS中的$http.post与jQuery.post的区别
Feb 27 Javascript
使用js实现的简单拖拽效果
Mar 18 Javascript
JavaScript setTimeout使用闭包功能实现定时打印数值
Dec 18 Javascript
JQUERY的AJAX请求缓存里的数据问题处理
Feb 23 Javascript
js实现炫酷的左右轮播图
Jan 18 Javascript
node.js与C语言 实现遍历文件夹下最大的文件,并输出路径,大小
Jan 20 Javascript
AngularJS之自定义服务详解(factory、service、provider)
Apr 14 Javascript
jquery实现掷骰子小游戏
Oct 24 jQuery
前端深入理解Typescript泛型概念
Mar 09 Javascript
Express 配置HTML页面访问的实现
Nov 01 Javascript
jquery显示和隐藏div特效实例
Feb 27 #Javascript
JS等比例缩小图片尺寸的实例
Feb 27 #Javascript
JQuery切换显示的效果实例代码
Feb 27 #Javascript
innerText和textContent对比及使用介绍
Feb 27 #Javascript
根据IP的地址,区分不同的地区,查看不同的网站页面的js代码
Feb 26 #Javascript
jQuery easyui datagrid动态查询数据实例讲解
Feb 26 #Javascript
jQuery建立一个按字母顺序排列的友好页面索引(兼容IE6/7/8)
Feb 26 #Javascript
You might like
PHP自动选择 连接本地还是远程数据库
2010/12/02 PHP
解析thinkphp import 文件内容变量失效的问题
2013/06/20 PHP
Yii框架表单提交验证功能分析
2017/01/07 PHP
基于jquery的修改当前TAB显示标题的代码
2010/12/11 Javascript
JavaScript动态修改网页元素内容的方法
2015/03/21 Javascript
javascript实现对表格元素进行排序操作
2015/11/18 Javascript
Javascript闭包实例详解
2015/11/29 Javascript
jQuery mobile 移动web(6)
2015/12/20 Javascript
JavaScript时间操作之年月日星期级联操作
2016/01/15 Javascript
JavaScript实现数据类型的相互转换
2016/03/06 Javascript
详解Vue自定义过滤器的实现
2017/01/10 Javascript
ES6 javascript中Class类继承用法实例详解
2017/10/30 Javascript
基于js 各种排序方法和sort方法的区别(详解)
2018/01/03 Javascript
微信小程序项目实践之主页tab选项实现
2018/07/18 Javascript
webpack 3.X学习之多页面打包的方法
2018/09/04 Javascript
微信小程序实现pdf、word等格式文件上传的方法
2019/09/10 Javascript
在node环境下parse Smarty模板的使用示例代码
2019/11/15 Javascript
el-table树形表格表单验证(列表生成序号)
2020/05/31 Javascript
探究一道价值25k的蚂蚁金服异步串行面试题
2020/08/21 Javascript
python实现图片处理和特征提取详解
2017/11/13 Python
python 使用pandas计算累积求和的方法
2019/02/08 Python
Django认证系统实现的web页面实现代码
2019/08/12 Python
vscode写python时的代码错误提醒和自动格式化的方法
2020/05/07 Python
PyTorch中Tensor的数据类型和运算的使用
2020/09/03 Python
美国最好的保健品打折网店:Swanson
2017/08/04 全球购物
英国设计师泳装、沙滩装和比基尼在线精品店:Beach Cafe
2019/08/28 全球购物
奥地利领先的在线药房:SHOP APOTHEKE
2019/10/07 全球购物
茱莉蔻美国官网:Jurlique美国
2020/11/24 全球购物
审核会计岗位职责
2013/11/08 职场文书
陈欧的广告词
2014/03/18 职场文书
延安红色之旅心得体会
2014/10/07 职场文书
幼儿园见习报告范文
2014/10/30 职场文书
公路施工安全责任书
2015/05/08 职场文书
廉洁自律证明
2015/06/24 职场文书
2015年车间管理工作总结
2015/07/23 职场文书
redis通过6379端口无法连接服务器(redis-server.exe闪退)
2021/05/08 Redis