源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

JavaScript对象创建及继承原理实例解剖

  • 时间:2020-02-09 17:15 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:JavaScript对象创建及继承原理实例解剖
[b]对象创建[/b]: 当一个函数对象被创建时候,Function构造器产生的函数对象会运行类似这样的代码:
[u]复制代码[/u] 代码如下:
this.prototype={constructor:this};
[b]假设函数F[/b] F用new方式构造对象时,对象的constructor被设置成这个F.prototype.constructor 如果函数在创建对象前修改了函数的prototype,会影响创建出来对象的construtor属性 如:
[u]复制代码[/u] 代码如下:
function F(){}; F.prototype={constructor:'1111'}; var o=new F();//o.constructor===‘1111' true
[b]继承原理[/b]: JavaScript中的继承是使用原型链的机制,每个函数的实例都共享构造函数prototype属性中定义的数据,要使一个类继承另一个,需要把父函数实例赋值到子函数的prototype属性。并且在每次new实例对象时,对象的私有属性__proto__会被自动连接到构造函数的prototype。 instanceof就是查找实例对象的私有prototype属性链来确定是否是指定对象的实例 [b]具体实例[/b]:
[u]复制代码[/u] 代码如下:
//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
上面自定义的Myinstanceof就是自己实现的一个instanceof功能的函数,由于IE内核实例存储prototype不是__proto__,所以Myinstanceof会无法通过,其他浏览器上应该都没有问题
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部