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 相关文章推荐
一个javascript参数的小问题
Mar 02 Javascript
jquery ajax post提交数据乱码
Nov 05 Javascript
node.js中的fs.readSync方法使用说明
Dec 17 Javascript
JavaScript日期类型的一些用法介绍
Mar 02 Javascript
iframe里使用JavaScript控制主页转向的方法
Apr 03 Javascript
在JavaScript中操作时间之getUTCDate()方法的使用
Jun 10 Javascript
轻松实现javascript数据双向绑定
Nov 11 Javascript
JavaScript操作 url 中 search 部分方法函数
Jun 15 Javascript
Javascript中数组去重与拍平的方法示例
Feb 03 Javascript
微信小程序三级联动地址选择器的实例代码
Jul 12 Javascript
详解如何使用webpack+es6开发angular1.x
Aug 16 Javascript
Vue中v-for的数据分组实例
Mar 07 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多进程编程实例
2014/10/15 PHP
php猜单词游戏
2015/09/29 PHP
PHP中header函数的用法及其注意事项详解
2016/06/13 PHP
php下载文件,添加响应头的简单实例
2016/09/22 PHP
基于Jquery的文字滚动跑马灯插件(一个页面多个滚动区)
2010/07/26 Javascript
javascript高级学习笔记整理
2011/08/14 Javascript
jQuery入门介绍之基础知识
2015/01/13 Javascript
JavaScript修改作用域外变量的方法
2016/03/25 Javascript
jquery取消事件冒泡的三种方法(推荐)
2016/05/28 Javascript
浅谈JavaScript 覆盖原型以及更改原型
2016/08/31 Javascript
AngularJs 利用百度地图API 定位当前位置 获取地址信息
2017/01/18 Javascript
微信小程序 天气预报开发实例代码源码
2017/01/20 Javascript
JavaScript拖动层Div代码
2017/03/01 Javascript
js判断是否是手机页面
2017/03/17 Javascript
Webpack打包css后z-index被重新计算的解决方法
2017/06/18 Javascript
详解在WebStorm中添加Vue.js单文件组件的高亮及语法支持
2017/10/21 Javascript
JS实现的将html转为pdf功能【基于浏览器端插件jsPDF】
2018/02/06 Javascript
浅谈Postman解决token传参的问题
2018/03/31 Javascript
vue2.0结合Element-ui实战案例
2019/03/06 Javascript
在Vue中使用this.$store或者是$route一直报错的解决
2019/11/08 Javascript
Vue中函数防抖节流的理解及应用实现
2020/04/24 Javascript
JavaScript使用setTimeout实现倒计时效果
2021/02/19 Javascript
[05:03]2018DOTA2亚洲邀请赛主赛事首日回顾
2018/04/04 DOTA
使用python的chardet库获得文件编码并修改编码
2014/01/22 Python
python模块之time模块(实例讲解)
2017/09/13 Python
Python selenium自动化测试模型图解
2020/04/15 Python
提高python代码运行效率的一些建议
2020/09/29 Python
Python本地及虚拟解释器配置过程解析
2020/10/13 Python
CSS3 文字动画效果
2020/11/12 HTML / CSS
创建青年文明号材料
2014/05/09 职场文书
大学生学习新党章思想汇报
2014/10/25 职场文书
个人先进事迹总结
2015/02/26 职场文书
综合测评个人总结
2015/03/03 职场文书
幼儿园六一儿童节演讲稿
2015/03/19 职场文书
学校捐书倡议书
2015/04/27 职场文书
信息技术教研组工作总结
2015/08/13 职场文书