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如何获取file控件的完整路径具体实现代码
May 15 Javascript
js获取客户端外网ip的简单实例
Nov 21 Javascript
用JS在浏览器中创建下载文件
Mar 05 Javascript
JS给超链接加确认对话框的方法
Feb 24 Javascript
jQuery实现冻结表头的方法
Mar 09 Javascript
javascript和jquery实现用户登录验证
May 04 Javascript
jQuery.Validate表单验证插件的使用示例详解
Jan 04 Javascript
js编写简单的聊天室功能
Aug 17 Javascript
json对象及数组键值的深度大小写转换问题详解
Mar 30 Javascript
Vue实现简单分页器
Dec 29 Javascript
vue-resourc发起异步请求的方法
Feb 11 Javascript
vue router-link 默认a标签去除下划线的实现
Nov 06 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设计模式 FlyWeight (享元模式)
2011/06/26 PHP
php动态变量定义及使用
2015/06/10 PHP
老司机传授Ubuntu下Apache+PHP+MySQL环境搭建攻略
2016/03/20 PHP
Laravel框架控制器的middleware中间件用法分析
2019/09/30 PHP
Laravel实现通过blade模板引擎渲染视图
2019/10/25 PHP
详解no input file specified 三种解决方法
2019/11/29 PHP
禁止js文件缓存的代码
2010/04/09 Javascript
jquery事件与函数的使用介绍
2013/09/29 Javascript
javascript框架设计之框架分类及主要功能
2015/06/23 Javascript
深入解读JavaScript中的Iterator和for-of循环
2015/07/28 Javascript
js合并两个数组生成合并后的key:value数组
2018/05/09 Javascript
vue element table 表格请求后台排序的方法
2018/09/28 Javascript
Vuex 使用 v-model 配合 state的方法
2018/11/13 Javascript
three.js实现炫酷的全景3D重力感应
2018/12/30 Javascript
Vue组件系列开发之模态框
2019/04/18 Javascript
详解微信小程序-canvas绘制文字实现自动换行
2019/04/26 Javascript
vue实现单一筛选、删除筛选条件
2020/10/26 Javascript
python 实现插入排序算法
2012/06/05 Python
在Django框架中编写Context处理器的方法
2015/07/20 Python
Python获取二维矩阵每列最大值的方法
2018/04/03 Python
Python 数据处理库 pandas 入门教程基本操作
2018/04/19 Python
python3.x实现发送邮件功能
2018/05/22 Python
基于Python的Post请求数据爬取的方法详解
2019/06/14 Python
Pandas之Dropna滤除缺失数据的实现方法
2019/06/25 Python
如何基于python操作json文件获取内容
2019/12/24 Python
用Python爬取LOL所有的英雄信息以及英雄皮肤的示例代码
2020/07/13 Python
Canvas实现保存图片到本地的示例代码
2018/06/28 HTML / CSS
英国电器零售商:PRC Direct
2018/06/21 全球购物
武汉东之林科技有限公司机试
2013/09/17 面试题
毕业生自荐书
2014/02/03 职场文书
质监局领导班子对照检查材料思想汇报
2014/09/27 职场文书
学校政风行风评议心得体会
2014/10/21 职场文书
项目备案申请报告
2015/05/15 职场文书
家访教师心得体会
2016/01/23 职场文书
如何用JS实现网页瀑布流布局
2021/04/24 Javascript
Vue Mint UI mt-swipe的使用方式
2022/06/05 Vue.js