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之十四 (触发事件核心方法)
Aug 23 Javascript
javascript获取设置div的高度和宽度兼容任何浏览器
Sep 22 Javascript
动态加载JS文件的三种方法
Nov 08 Javascript
jquery delay()介绍及使用指南
Sep 02 Javascript
JavaScript编写推箱子游戏
Jul 07 Javascript
js实现鼠标点击文本框自动选中内容的方法
Aug 20 Javascript
JavaScript表单验证实现代码
May 22 Javascript
小程序指纹验证的实现代码
Dec 04 Javascript
利用Promise自定义一个GET请求的函数示例代码
Mar 20 Javascript
JavaScript面向对象编程小游戏---贪吃蛇代码实例
May 15 Javascript
浅谈vue中使用编辑器vue-quill-editor踩过的坑
Aug 03 Javascript
一文帮你理解PReact10.5.13源码
Apr 03 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的header和asp中的redirect比较
2006/10/09 PHP
php字符比较函数similar_text、strnatcmp与strcasecmp用法分析
2014/11/18 PHP
Yii2 GridView实现列表页直接修改数据的方法
2016/05/16 PHP
PHP常用函数之格式化时间操作示例
2019/10/21 PHP
手把手教你自己写一个js表单验证框架的方法
2010/09/14 Javascript
jQuery学习基础知识小结
2010/11/25 Javascript
jquery.blockUI.js上传滚动等待效果实现思路及代码
2013/03/18 Javascript
javascript与css3动画结合使用小结
2015/03/11 Javascript
浅谈jQuery的offset()方法及示例分享
2015/07/17 Javascript
js+html5实现可在手机上玩的拼图游戏
2015/07/17 Javascript
jQuery遍历DOM节点操作之filter()方法详解
2016/04/14 Javascript
详解jQuery中的deferred对象的使用(一)
2016/05/27 Javascript
AngularJS过滤器filter用法总结
2016/12/13 Javascript
微信小程序--onShareAppMessage分享参数用处(页面分享)
2017/04/18 Javascript
Nodejs 和Session 原理及实战技巧小结
2017/08/25 NodeJs
Node.js使用cookie保持登录的方法
2018/05/11 Javascript
vue路由--网站导航功能详解
2019/03/29 Javascript
微信小程序连续签到7天积分获得功能的示例代码
2020/08/20 Javascript
JavaScript实现手风琴效果
2021/02/18 Javascript
[01:28:56]2014 DOTA2华西杯精英邀请赛 5 24 CIS VS DK
2014/05/26 DOTA
python不带重复的全排列代码
2013/08/13 Python
Django中几种重定向方法
2015/04/28 Python
python实现list元素按关键字相加减的方法示例
2017/06/09 Python
Python Grid使用和布局详解
2018/06/30 Python
Python入门Anaconda和Pycharm的安装和配置详解
2019/07/16 Python
Python Django2.0集成Celery4.1教程
2019/11/19 Python
Python读取文件内容为字符串的方法(多种方法详解)
2020/03/04 Python
Python matplotlib实时画图案例
2020/04/23 Python
python中sort sorted reverse reversed函数的区别说明
2020/05/11 Python
瑞士领先的网上超市:LeShop.ch
2018/11/14 全球购物
美国牙科折扣计划:DentalPlans.com
2019/08/26 全球购物
意大利文具和办公产品在线商店:Y-Office
2020/02/27 全球购物
英语专业个人求职信范文
2014/02/01 职场文书
优秀大专毕业生求职信
2014/08/04 职场文书
解决Jenkins集成SonarQube遇到的报错问题
2021/07/15 Java/Android
微信小程序调用python模型
2022/04/21 Python