JavaScript中创建对象和继承示例解读


Posted in Javascript onFebruary 12, 2014

对象创建:

当一个函数对象被创建时候,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
Javascript 相关文章推荐
JS写的数字拼图小游戏代码[学习参考]
Oct 29 Javascript
js 判断 enter 事件
Feb 12 Javascript
jquery实现鼠标拖动图片效果示例代码
Jan 09 Javascript
加载列表时jquery获取ul中第一个li的属性
Nov 02 Javascript
原生js模拟淘宝购物车项目实战
Nov 18 Javascript
聊一聊JavaScript作用域和作用域链
May 03 Javascript
JavaScript实现鼠标点击导航栏变色特效
Feb 08 Javascript
学习使用Bootstrap输入框、导航、分页等常用组件
May 11 Javascript
ES6入门教程之Iterator与for...of循环详解
May 17 Javascript
vue3.0 CLI - 2.5 - 了解组件的三维
Sep 14 Javascript
javascript触发模拟鼠标点击事件
Jun 26 Javascript
layer弹出层倒计时关闭的实现方法
Sep 27 Javascript
javascript实现文本域写入字符时限定字数
Feb 12 #Javascript
js 绑定键盘鼠标事件示例代码
Feb 12 #Javascript
动态加载jquery库的方法
Feb 12 #Javascript
jquery实现页面图片等比例放大缩小功能
Feb 12 #Javascript
javascript获取web应用根目录的方法
Feb 12 #Javascript
使用javascript控制cookie显示和隐藏背景图
Feb 12 #Javascript
raphael.js绘制中国地图 地图绘制方法
Feb 12 #Javascript
You might like
对squid中refresh_pattern的一些理解和建议
2009/04/17 PHP
php中检查文件或目录是否存在的代码小结
2012/10/22 PHP
PHP实现linux命令tail -f
2016/02/22 PHP
Javascript----文件操作
2007/01/18 Javascript
用js实现预览待上传的本地图片
2007/03/15 Javascript
Jquery Ajax学习实例5 向WebService发出请求,返回泛型集合数据的异步调用
2010/03/17 Javascript
使用 JScript 创建 .exe 或 .dll 文件的方法
2011/07/13 Javascript
jQuery实现动画效果circle实例
2015/08/06 Javascript
JS实现浏览器状态栏显示时间的方法
2015/10/27 Javascript
基于Javascript实现返回顶部按钮
2016/02/29 Javascript
NodeJS实现微信公众号关注后自动回复功能
2017/05/31 NodeJs
Angular.js通过自定义指令directive实现滑块滑动效果
2017/10/13 Javascript
vue+iview+less+echarts实战项目总结
2018/02/22 Javascript
一个基于react的图片裁剪组件示例
2018/04/18 Javascript
javascript面向对象三大特征之封装实例详解
2019/07/24 Javascript
vue input标签通用指令校验的实现
2019/11/05 Javascript
用Angular实现一个扫雷的游戏示例
2020/05/15 Javascript
微信小程序实现通讯录列表展开收起
2020/11/18 Javascript
[48:48]完美世界DOTA2联赛PWL S3 Magama vs GXR 第一场 12.19
2020/12/24 DOTA
在Python中使用NLTK库实现对词干的提取的教程
2015/04/08 Python
举例讲解Python中metaclass元类的创建与使用
2016/06/30 Python
Python面向对象之继承和多态用法分析
2019/06/08 Python
Python实现K折交叉验证法的方法步骤
2019/07/11 Python
python用WxPython库实现无边框窗体和透明窗体实现方法详解
2020/02/21 Python
python:删除离群值操作(每一行为一类数据)
2020/06/08 Python
Selenium之模拟登录铁路12306的示例代码
2020/07/31 Python
纯CSS改变webkit内核浏览器的滚动条样式
2014/04/17 HTML / CSS
新加坡航空官方网站:Singapore Airlines
2016/10/13 全球购物
英国电子产品购物网站:Tech in the basket
2019/11/08 全球购物
怎样从/向数据文件读/写结构
2014/11/23 面试题
策划主管的工作职责
2013/11/24 职场文书
船舶专业个人求职信范文
2014/01/02 职场文书
企业宗旨标语
2014/06/10 职场文书
2015年新农合工作总结
2015/03/30 职场文书
升学宴祝酒词
2015/08/11 职场文书
如何解决springcloud feign 首次调用100%失败的问题
2021/06/23 Java/Android