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 相关文章推荐
Jquery Autocomplete 结合asp.net使用要点
Oct 29 Javascript
js onload处理html页面加载之后的事件
Oct 30 Javascript
浅析Node.js查找字符串功能
Sep 03 Javascript
Javascript限制网页只能在微信内置浏览器中访问
Nov 09 Javascript
浅谈JavaScript 函数参数传递到底是值传递还是引用传递
Aug 23 Javascript
Vue 页面切换效果之 BubbleTransition(推荐)
Apr 08 Javascript
vue addRoutes实现动态权限路由菜单的示例
May 15 Javascript
对angularJs中自定义指令replace的属性详解
Oct 09 Javascript
vue项目搭建以及全家桶的使用详细教程(小结)
Dec 19 Javascript
如何实现小程序tab栏下划线动画效果
May 18 Javascript
javascript实现简易聊天室
Jul 12 Javascript
微信小程序实现星级评价
Nov 20 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
全国中波电台频率表
2020/03/11 无线电
php URL跳转代码 减少外链
2011/06/25 PHP
基于php解决json_encode中文UNICODE转码问题
2020/11/10 PHP
JavaScript 事件冒泡简介及应用
2010/01/11 Javascript
用jquery实现等比例缩放图片效果插件
2010/07/24 Javascript
jquery isType() 类型判断代码
2011/02/14 Javascript
通过pjax实现无刷新翻页(兼容新版jquery)
2014/01/31 Javascript
js和css写一个可以自动隐藏的悬浮框
2014/03/05 Javascript
用JavaScript判断CSS浏览器类型前缀的两种方法
2015/10/08 Javascript
js获取本机操作系统类型的两种方法
2015/12/19 Javascript
AngularJS入门教程之Select(选择框)详解
2016/07/27 Javascript
基于jquery实现的鼠标悬停提示案例
2016/12/11 Javascript
利用NPM淘宝的node.js镜像加速nvm
2017/03/27 Javascript
vue实现百度搜索下拉提示功能实例
2017/06/14 Javascript
详解基于Node.js的微信JS-SDK后端接口实现代码
2017/07/15 Javascript
Python正则表达式的使用范例详解
2014/08/08 Python
Python UnboundLocalError和NameError错误根源案例解析
2018/10/31 Python
python 高效去重复 支持GB级别大文件的示例代码
2018/11/08 Python
python实现字符串加密 生成唯一固定长度字符串
2019/03/22 Python
微信小程序python用户认证的实现
2019/07/29 Python
logging level级别介绍
2020/02/21 Python
Python性能分析工具py-spy原理用法解析
2020/07/27 Python
python实现文件分片上传的接口自动化
2020/11/19 Python
html5新增的属性和废除的属性简要概述
2013/02/20 HTML / CSS
俄罗斯珠宝市场的领导者之一:Бронницкий ювелир
2019/10/02 全球购物
linux面试题参考答案(5)
2016/11/05 面试题
网站设计师的岗位职责
2013/11/21 职场文书
服装设计专业自荐书范文
2013/12/30 职场文书
火车来了教学反思
2014/02/11 职场文书
劳动争议和解协议书范本
2014/11/20 职场文书
质检员工作总结2015
2015/04/25 职场文书
家长会主持词开场白
2015/05/29 职场文书
《多彩的民间艺术》教学反思
2016/02/16 职场文书
大学生奖学金获奖感言(范文)
2019/08/15 职场文书
在MySQL中你成功的避开了所有索引
2022/04/20 MySQL
德生2P3收音机开箱评测
2022/04/30 无线电