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中==与===操作符的比较
Mar 21 Javascript
Javascript学习笔记1 数据类型
Jan 11 Javascript
javascript 冒泡排序 正序和倒序实现代码
Dec 14 Javascript
{}与function(){}选用空对象{}来存放keyValue
May 23 Javascript
jquery获取radio值(单选组radio)
Oct 16 Javascript
面向切面编程(AOP)的理解
May 01 Javascript
JavaScript判断图片是否已经加载完毕的方法汇总
Feb 05 Javascript
不同js异步函数同步的实现方法
May 28 Javascript
JavaScript中的this使用详解
Jul 27 Javascript
[原创]javascript typeof id==='string'?document.getElementById(id):id解释
Nov 02 Javascript
angular 用拦截器统一处理http请求和响应的方法
Jun 08 Javascript
js实现canvas保存图片为png格式并下载到本地的方法
Aug 31 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 session处理的定制
2009/03/16 PHP
PHP setcookie设置Cookie用法(及设置无效的问题)
2011/07/13 PHP
php curl常见错误:SSL错误、bool(false)
2011/12/28 PHP
ThinkPHP连接数据库及主从数据库的设置教程
2014/08/22 PHP
PHP下载远程文件到本地存储的方法
2015/03/24 PHP
php利用事务处理转账问题
2015/04/22 PHP
jquery动态添加删除div 具体实现
2013/07/20 Javascript
js读取注册表的键值示例
2013/09/25 Javascript
模拟用户点击弹出新页面不会被浏览器拦截
2014/04/08 Javascript
jQuery中slideUp 和 slideDown 的点击事件
2015/02/26 Javascript
JS简单编号生成器实现方法(附demo源码下载)
2016/04/05 Javascript
JS实现的添加弹出层并完成锁屏操作示例
2017/04/07 Javascript
Angular将填入表单的数据渲染到表格的方法
2017/09/22 Javascript
Vue2.5通过json文件读取数据的方法
2018/02/27 Javascript
详解Vue Elememt-UI构建管理后台
2018/02/27 Javascript
React父子组件间的传值的方法
2018/11/13 Javascript
JS实现购物车基本功能
2020/11/08 Javascript
王纯业的Python学习笔记 下载
2007/02/10 Python
Python中DJANGO简单测试实例
2015/05/11 Python
Python学习小技巧总结
2018/06/10 Python
python tornado微信开发入门代码
2018/08/24 Python
python模拟点击网页按钮实现方法
2020/02/25 Python
浅谈Python的方法解析顺序(MRO)
2020/03/05 Python
django中url映射规则和服务端响应顺序的实现
2020/04/02 Python
浅谈django channels 路由误导
2020/05/28 Python
好的自荐信的要求
2013/10/30 职场文书
科级干部考察材料
2014/02/15 职场文书
学校四群教育实施方案
2014/06/12 职场文书
党员个人对照检查材料范文
2014/09/24 职场文书
实习班主任自我评价
2015/03/11 职场文书
2015年房地产销售工作总结
2015/04/20 职场文书
医院员工辞职信范文
2015/05/12 职场文书
经典格言警句:没有热忱,世间便无进步
2019/11/13 职场文书
Mysql案例刨析事务隔离级别
2021/09/25 MySQL
django中websocket的具体使用
2022/01/22 Python
如何更改Win11声音输出设备?Win11声音输出设备四种更改方法
2022/04/08 数码科技