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 相关文章推荐
js substring从右边获取指定长度字符串(示例代码)
Dec 23 Javascript
javascript的函数作用域
Nov 12 Javascript
IE下支持文本框和密码框placeholder效果的JQuery插件分享
Jan 31 Javascript
js计算德州扑克牌面值的方法
Mar 04 Javascript
详解JavaScript函数对象
Nov 15 Javascript
超赞的jQuery图片滑块动画特效代码汇总
Jan 25 Javascript
在页面中引入js的两种方法(推荐)
Aug 29 Javascript
vue 虚拟dom的patch源码分析
Mar 01 Javascript
详解webpack打包第三方类库的正确姿势
Oct 20 Javascript
详解JSON.stringify()的5个秘密特性
May 26 Javascript
JS如何定义用字符串拼接的变量
Jul 11 Javascript
vue-cli4使用全局less文件中的变量配置操作
Oct 21 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 zend 相对路径问题
2009/01/12 PHP
php ob_flush,flush在ie中缓冲无效的解决方法
2010/05/09 PHP
PHP三元运算符的结合性介绍
2012/01/10 PHP
邮箱正则表达式实现代码(针对php)
2013/06/21 PHP
请离开include_once和require_once
2013/07/18 PHP
php检测数组长度函数sizeof与count用法
2014/11/17 PHP
PHP基于面向对象实现的留言本功能实例
2018/04/04 PHP
php识别翻转iphone拍摄的颠倒图片
2018/05/17 PHP
使用Zookeeper分布式部署PHP应用程序
2019/03/15 PHP
简单时间提示DEMO从0开始一直进行计时
2013/11/19 Javascript
轻松创建nodejs服务器(7):阻塞操作的实现
2014/12/18 NodeJs
JavaScript中5种调用函数的方法
2015/03/12 Javascript
JavaSciprt中处理字符串之sup()方法的使用教程
2015/06/08 Javascript
JavaScript实现网页加载进度条代码超简单
2015/09/21 Javascript
全面了解javascript中的错误处理机制
2016/07/18 Javascript
vue 里面使用axios 和封装的示例代码
2017/09/01 Javascript
基于滚动条位置判断的简单实例
2017/12/14 Javascript
vue init webpack 建vue项目报错的解决方法
2018/09/29 Javascript
JavaScript函数式编程(Functional Programming)纯函数用法分析
2019/05/22 Javascript
layui实现下拉复选功能的例子(包括数据的回显与上传)
2019/09/24 Javascript
Python读取图片属性信息的实现方法
2016/09/11 Python
在Python程序员面试中被问的最多的10道题
2017/12/05 Python
Python实现端口检测的方法
2018/07/24 Python
在python中利用numpy求解多项式以及多项式拟合的方法
2019/07/03 Python
Python Django路径配置实现过程解析
2020/11/05 Python
通过CSS3的object-fit来调整图片适配尺寸的技巧简介
2016/02/27 HTML / CSS
Yahoo-PHP面试题2
2014/12/06 面试题
工业设计毕业生自荐信
2014/04/13 职场文书
低碳环保倡议书
2014/04/14 职场文书
生物科学专业自荐书
2014/06/20 职场文书
上课随便讲话检讨书
2014/09/12 职场文书
捐款感谢信
2015/01/20 职场文书
网络销售员岗位职责
2015/04/11 职场文书
2016年区委书记抓基层党建工作公开承诺书
2016/03/25 职场文书
vue-cropper组件实现图片切割上传
2021/05/27 Vue.js
python使用pymysql模块操作MySQL
2021/06/16 Python