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

标签:关于我们    日期:2017-10-12 09:14    录入:汇盛国际平台    浏览:

  

[对象创建,继承原理]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  
  
上面自定义的Myinstanceof就是自己实现的一个instanceof功能的函数,由于IE内核实例存储prototype不是__proto__,所以Myinstanceof会无法通过,其他浏览器上应该都没有问题  

★★★小编:汇盛国际注册 整理文章,欢迎大家转载 ★★★
上一篇:Bootstrap页面缩小变形的快速解决办法
下一篇:没有了
相关文章阅读
点击右上角的分享按钮即可收藏汇盛国际平台注册 随时随地与好友一起分享精彩内容噢
最近更新
热门排行