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中的location用法简单介绍
Mar 07 Javascript
JS等比例缩小图片尺寸的实例
Feb 27 Javascript
JS获得QQ号码的昵称,头像,生日的简单实例
Dec 04 Javascript
在firefox和Chrome下关闭浏览器窗口无效的解决方法
Jan 16 Javascript
jquery列表拖动排列(由项目提取相当好用)
Jun 17 Javascript
js+html制作简单验证码
Feb 16 Javascript
JavaScript实现AOP详解(面向切面编程,装饰者模式)
Dec 19 Javascript
jQuery代码优化方法总结
Jan 29 jQuery
性能优化篇之Webpack构建速度优化的建议
Apr 03 Javascript
微信小程序第三方框架对比 之 wepy / mpvue / taro
Apr 10 Javascript
Node.js 的 GC 机制详解
Jun 03 Javascript
微信小程序点击按钮动态切换input的disabled禁用/启用状态功能
Mar 07 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
PHP远程连接MYSQL数据库非常慢的解决方法
2008/07/05 PHP
php 常用类整理
2009/12/23 PHP
关于访问控制的一首PHP面试题(对属性或方法的访问控制)
2012/09/13 PHP
PHP开发微信支付的代码分享
2014/05/25 PHP
实例介绍PHP中zip_open()函数用法
2019/02/15 PHP
DOM精简教程
2006/10/03 Javascript
JavaScript Event学习第八章 事件的顺序
2010/02/07 Javascript
Eval and new funciton not the same thing
2012/12/27 Javascript
Javascript中匿名函数的多种调用方式总结
2013/12/06 Javascript
使用jQuery重置(reset)表单的方法
2014/05/05 Javascript
jQuery密码强度检测插件passwordStrength用法实例分析
2015/10/30 Javascript
jQuery实现移动端滑块拖动选择数字效果
2015/12/24 Javascript
JS简单实现移动端日历功能示例
2016/12/28 Javascript
javascript 单例模式详解及简单实例
2017/02/14 Javascript
打通前后端构建一个Vue+Express的开发环境
2018/07/17 Javascript
详解vue-cli 2.0配置文件(小结)
2019/01/14 Javascript
浅谈vue项目用到的mock数据接口的两种方式
2019/10/09 Javascript
微信小程序实现单个或多个倒计时功能
2020/11/01 Javascript
[41:37]DOTA2北京网鱼队选拔赛——冲击职业之路
2015/04/13 DOTA
python连接mysql数据库示例(做增删改操作)
2013/12/31 Python
Python中的startswith和endswith函数使用实例
2014/08/25 Python
编写Python脚本批量下载DesktopNexus壁纸的教程
2015/05/06 Python
教你用Type Hint提高Python程序开发效率
2016/08/08 Python
python虚拟环境virtualenv的使用教程
2017/10/20 Python
纯python进行矩阵的相乘运算的方法示例
2019/07/17 Python
Django更新models数据库结构步骤
2020/04/01 Python
基于Python的OCR实现示例
2020/04/03 Python
python raise的基本使用
2020/09/10 Python
美国最大的在线生存商店:Survival Frog
2020/12/13 全球购物
企业元宵节主持词
2014/03/25 职场文书
家具公司总经理岗位职责
2014/07/08 职场文书
社区个人对照检查材料(群众路线)
2014/09/26 职场文书
2015暑期社会实践个人总结
2015/07/13 职场文书
化工厂员工工作总结
2015/10/15 职场文书
描述鲁迅的名言整理,一生受用
2019/08/08 职场文书
OpenCV-Python使用cv2实现傅里叶变换
2021/06/09 Python