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 相关文章推荐
可输入的下拉框
Jun 19 Javascript
javascript判断非数字的简单例子
Jul 18 Javascript
第一章之初识Bootstrap
Apr 25 Javascript
浅谈JavaScript前端开发的MVC结构与MVVM结构
Jun 03 Javascript
JS原型对象的创建方法详解
Jun 16 Javascript
js中遍历Map对象的简单实例
Aug 08 Javascript
jQuery内容过滤选择器用法示例
Sep 09 Javascript
jquery+ajax实现省市区三级联动 (封装和不封装两种方式)
May 15 jQuery
jquery 给动态生成的标签绑定事件的几种方法总结
Feb 24 jQuery
详解mpvue中小程序自定义导航组件开发指南
Feb 11 Javascript
vue点击页面空白处实现保存功能
Nov 06 Javascript
vue动态加载SVG文件并修改节点数据的操作代码
Aug 17 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中动态HTML的输出技术
2006/10/09 PHP
php.ini中date.timezone设置分析
2011/07/29 PHP
php实现快速排序法函数代码
2012/08/27 PHP
浅析php学习的路线图
2013/07/10 PHP
php增删改查示例自己写的demo
2013/09/04 PHP
php smarty模板引擎的6个小技巧
2014/04/24 PHP
php中数组最简单的使用方法
2020/12/27 PHP
Use Word to Search for Files
2007/06/15 Javascript
javascript 时间比较实现代码
2009/10/28 Javascript
跟着JQuery API学Jquery 之二 属性
2010/04/09 Javascript
JQUERY获取form表单值的代码
2010/07/17 Javascript
JS 表单验证大全
2011/11/23 Javascript
javascript+canvas制作九宫格小程序
2014/12/28 Javascript
javascript实现行拖动的方法
2015/05/27 Javascript
jQuery预加载图片常用方法
2015/06/15 Javascript
使用BootStrap实现用户登录界面UI
2016/08/10 Javascript
利用D3.js实现最简单的柱状图示例代码
2016/12/09 Javascript
angular或者js怎么确定选中ul中的哪几个li
2017/08/16 Javascript
vue侧边栏动态生成下级菜单的方法
2018/09/07 Javascript
微信小程序使用前置摄像头拍照
2020/10/22 Javascript
解决antd 表单设置默认值initialValue后验证失效的问题
2020/11/02 Javascript
[42:39]老党炸弹人试玩视频
2014/09/03 DOTA
python内存管理分析
2015/04/08 Python
Python聚类算法之DBSACN实例分析
2015/11/20 Python
Python 取numpy数组的某几行某几列方法
2019/10/24 Python
Python下载网易云歌单歌曲的示例代码
2020/08/12 Python
经典c++面试题二
2015/08/14 面试题
特教教师先进事迹
2014/05/21 职场文书
投标承诺书怎么写
2014/05/24 职场文书
经理任命书模板
2014/06/06 职场文书
银行柜员与客户起冲突检讨书
2014/09/27 职场文书
2014年会计工作总结
2014/11/27 职场文书
先进个人总结范文
2015/02/15 职场文书
结婚通知短信怎么写
2015/04/17 职场文书
2015年社区综治工作总结
2015/04/21 职场文书
2016秋季校长开学典礼致辞
2015/11/26 职场文书