您的位置:首页 > Web前端 > JavaScript

js运算符instanceof的工作原理

2012-07-05 20:48 218 查看
  结论: 判断类的prototype对象是否存在于实例对象的原型链上。是则返回true。
 例如obj instanceof Fn 。
   1,objProto = obj.__proto__ 。(__proto__指对象 内部隐式的[[Prototype]] ,在FF、chrome下可用__proto__访问,其他浏览器不一定能访问)
   2,判断Fn.prototype == objProto , 是则返回true,否则
   3,objProto == objProto .__proto__,如果objProto 不为null ,跳到2

 这两天研究jquery源码,又纠结在它的实例化方式上了,总是看不明白。
var jQuery = function( selector, context ) {
return new jQuery.fn.init( selector, context );
};
jQuery.fn = jQuery.prototype = {
init: function( selector, context ) {
}
}
jQuery.fn.init.prototype = jQuery.fn;


 我发现如下情况
  var b = jQuery("body") ;

  b instanceof jQuery.fn.init //true

  b instanceof jQuery //true

 从代码上看jQuery.fn.init与jQuery不存在继承关系,怎么就调用jQuery返回jQuery.fn.init的实例却也是jQuery的实例呢。

 今天看了一篇博客,顺便推荐下这篇,我看了后纠结的东西明白了不少。


  JavaScript对象模型-执行模型


  /article/4759713.html

 看着突然就想到了最上面的结论。于是做了测试,代码如下
function A(){
this.init = 1;
}
function B(){
this.init2 = 1;
}
A.prototype = B.prototype = {
fun1 : function(){
}
};
var a = new A();
a instanceof A //true
a instanceof B //true


不过我还是有点小疑问
Function instanceof Object //true
Object instanceof Function //true
这个Function 跟Object的原型链是咋样的呢?
 完毕。

 enjoy!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: