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 相关文章推荐
关于URL中的特殊符号使用介绍
Nov 03 Javascript
Jquery 模拟用户点击超链接或者按钮的方法
Oct 25 Javascript
jquery实现TAB选项卡鼠标经过带延迟效果的方法
Jul 27 Javascript
详解js私有作用域中创建特权方法
Jan 25 Javascript
通过js修改input、select默认字体颜色
Apr 19 Javascript
vue 添加vux的代码讲解
Nov 30 Javascript
分析javascript原型及原型链
Mar 18 Javascript
微信小程序实现文字跑马灯
May 26 Javascript
如何解决webpack-dev-server代理常切换问题
Jan 09 Javascript
JS实现的排列组合算法示例
Jul 16 Javascript
如何配置vue.config.js 处理static文件夹下的静态文件
Jun 19 Javascript
JavaScript原型链中函数和对象的理解
Jun 16 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 htmlspecialchars()函数用法与实例讲解
2019/03/08 PHP
Centos7 Yum安装PHP7.2流程教程详解
2019/07/02 PHP
JavaScript 继承详解(四)
2009/07/13 Javascript
javascript 利用Image对象实现的埋点(某处的点击数)统计
2012/12/28 Javascript
JavaScript DOM 编程艺术(第2版)读书笔记(JavaScript的最佳实践)
2013/10/01 Javascript
一个JavaScript获取元素当前高度的实例
2014/10/29 Javascript
JS实现一个按钮的方法
2015/02/05 Javascript
javascript实现通过表格绘制颜色填充矩形的方法
2015/04/21 Javascript
常用DOM整理
2015/06/16 Javascript
jquery性能优化高级技巧
2015/08/24 Javascript
jQuery插件实现表格隔行变色及鼠标滑过高亮显示效果代码
2016/02/25 Javascript
利用策略模式与装饰模式扩展JavaScript表单验证功能
2017/02/14 Javascript
JS 中document.write()的用法和清空的原因浅析
2017/12/04 Javascript
JavaScript生成指定范围的时间列表
2018/03/19 Javascript
node.js调用C++函数的方法示例
2018/09/21 Javascript
原生js基于canvas实现一个简单的前端截图工具代码实例
2019/09/10 Javascript
Vue的click事件防抖和节流处理详解
2019/11/13 Javascript
如何在node环境实现“get数据解析”代码实例
2020/07/03 Javascript
Python 元组(Tuple)操作详解
2014/03/11 Python
利用Python和OpenCV库将URL转换为OpenCV格式的方法
2015/03/27 Python
Python实现删除列表中满足一定条件的元素示例
2017/06/12 Python
python做量化投资系列之比特币初始配置
2018/01/23 Python
python实现简单的购物程序代码实例
2020/03/03 Python
python GUI库图形界面开发之PyQt5结合Qt Designer创建信号与槽的详细方法与实例
2020/03/08 Python
HTML5样式控制示例代码
2013/11/27 HTML / CSS
泰国最新活动和优惠:Megatix
2020/05/07 全球购物
介绍一下你对SOA的认识
2016/04/24 面试题
护理学专业推荐信
2013/12/03 职场文书
大学生毕业的自我评价分享
2014/01/02 职场文书
会展策划与管理专业求职信
2014/06/09 职场文书
公安交警中队队长个人对照检查材料思想汇报
2014/10/05 职场文书
滴水洞导游词
2015/02/10 职场文书
辩论会主持词
2015/07/03 职场文书
外出考察学习心得体会
2016/01/18 职场文书
Java并发编程必备之Future机制
2021/06/30 Java/Android
Python+Selenium自动化环境搭建与操作基础详解
2022/03/13 Python