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 相关文章推荐
奉献给JavaScript初学者的编写开发的七个细节
Jan 11 Javascript
Jquery中Ajax 缓存带来的影响的解决方法
May 19 Javascript
基于jquery实现的可编辑下拉框实现代码
Aug 02 Javascript
Javascript代码实现仿实例化类
Apr 03 Javascript
iscroll.js的上拉下拉刷新时无法回弹的解决方法
Feb 18 Javascript
一起学写js Calender日历控件
Apr 14 Javascript
深入学习JavaScript 高阶函数
Jun 11 Javascript
ES6 Iterator接口和for...of循环用法分析
Jul 31 Javascript
微信小程序实现组件顶端固定或底端固定效果(不随滚动而滚动)
Apr 09 Javascript
JS实现躲避粒子小游戏
Jun 18 Javascript
一百多行代码实现react拖拽hooks
Mar 23 Javascript
React如何使用axios请求数据并把数据渲染到组件
Aug 05 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
在IIS7.0下面配置PHP 5.3.2运行环境的方法
2010/04/13 PHP
根据中文裁减字符串函数的php代码
2013/12/03 PHP
Win7环境下Apache连接MySQL提示连接已重置的解决办法
2017/05/09 PHP
PHP操作MySQL中BLOB字段的方法示例【存储文本与图片】
2017/09/15 PHP
document.all与WEB标准
2020/05/13 Javascript
js 点击页面其他地方关闭弹出层(示例代码)
2013/12/24 Javascript
JavaScript中Cookie操作实例
2015/01/09 Javascript
JavaScript中实现map功能代码分享
2015/06/11 Javascript
JQuery实现鼠标移动图片显示描述层的方法
2015/06/25 Javascript
jQuery实现单击按钮遮罩弹出对话框效果(1)
2017/02/20 Javascript
借助node实战JSONP跨域实例
2017/03/30 Javascript
用javascript获取任意颜色的更亮或更暗颜色值示例代码
2017/07/21 Javascript
swiper动态改变滑动内容的实现方法
2018/01/17 Javascript
javascript实现考勤日历功能
2018/11/29 Javascript
如何使用 vue + d3 画一棵树
2018/12/03 Javascript
angular 用Observable实现异步调用的方法
2018/12/27 Javascript
JS+php后台实现文件上传功能详解
2019/03/02 Javascript
基于 jQuery 实现键盘事件监听控件
2019/04/04 jQuery
Python设计模式之观察者模式实例
2014/04/26 Python
python之yield表达式学习
2014/09/02 Python
Python Xml文件添加字节属性的方法
2018/03/31 Python
Python常用的json标准库
2019/02/19 Python
解决.ui文件生成的.py文件运行不出现界面的方法
2019/06/19 Python
python中必要的名词解释
2019/11/20 Python
HTML5实现可缩放时钟代码
2017/08/28 HTML / CSS
英国历史最悠久的DJ设备供应商:DJ Finance、DJ Warehouse、The DJ Shop
2019/09/04 全球购物
EJB的角色和三个对象
2015/12/31 面试题
财务管理专业自荐信范文
2013/12/24 职场文书
违反课堂纪律检讨书
2014/01/19 职场文书
超市周年庆活动方案
2014/08/16 职场文书
党的群众路线对照检查材料
2014/08/27 职场文书
2014年学校食堂工作总结
2014/11/25 职场文书
2014年青年志愿者工作总结
2014/12/09 职场文书
人事专员岗位职责
2015/02/03 职场文书
医务人员医德医风心得体会
2016/01/25 职场文书
分享7个 Python 实战项目练习
2022/03/03 Python