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


对象创建:

当一个函数对象被创建时候,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



相关阅读:
使用jQuery UI库开发Web界面的简单入门指引
ASP.NET MVC4入门教程(三):添加一个视图
禁止iframe脚本弹出的窗口覆盖了父窗口的方法
Win10通用版Dropbox应用更新 新增复制文件或文件夹
PHP将两个关联数组合并函数提高函数效率
oracle中误删除表后恢复语句(FLASHBACK)
nodejs 中模拟实现 emmiter 自定义事件
数据库工具sysbench安装教程和性能测试例子
MySQL中的基本查询语句学习笔记
MySQL学习笔记4:完整性约束限制字段
AngularJS中的Directive实现延迟加载
C#中new和override的区别个人总结
MAC下如何使用SiteSucker?SiteSuckerMAC版的使用方法
盘点javascript 正则表达式中 中括号的【坑】
快速导航

Copyright © 2016 phpStudy |