首页 > 代码库 > JS原型的问题Object和Function到底是什么关系
JS原型的问题Object和Function到底是什么关系
var F = function(){}; Objcert.prototype.a = function(){}; Function.prototype.b = function(){};
F 既能访问到a,也能访问到(Object 和 Function也同样,但是所有的实例只能访问到a);F是Object 和 Function 两个的实例,那么Object 和 Function 到底是什么关系?
下面是对Object 和 Function 的了解
F instanceof Object true F instanceof Function true Object instanceof Function true Function instanceof Object true Object: function Object(){ [native code] }; Object.construtor function Function(){ [native code] }; Function: function Function(){ [native code] }; Function.constructor == Function; // true Object == Function ; // false
可以知道
1.Object 和 Function有相同的构造函数 function Function (){ [native code] }
2.Object 和 Function 不相等
Number instanceof Number false Number instanceof Function true Number instanceof Object true Number.constructor function Function(){ [native code] } Array instanceof Object true Array instanceof Function true
3.其他基本类型或者非基本类型也都是Object的实例也是Function的实例。
假如这样:
var foo = {}; F = function(){}; object.prototype.a = "value.a"; Function.prototype.b = "value.b"; console.log(foo.a); // value.a console.log(foo.b); // undefined console.log(F.a); // value.a console.log(F.b); // value.b
那么:
foo.a的查找路径:foo 自身:没有--->foo.__proto__(Object.prototype):找到value.a
foo.b的查找路径:foo 自身:没有--->foo.__proto__(Object.prototype):没有--->foo.__proto__.__proto__(Object.prototype.__proto__):没有
F.a查找路径:F自身:没有--->F.__proto__(Function.prototype):没有--->F.__proto__.__proto__(Object.prototype):找到value.a
F.b的查找路径:F自身:没有--->F.__proto__(Function.prototype):找到value.b
4.实例对象的constructor属性指向其构造函数。因此Object.contructor === Function, Function.contructor === Function
JS原型的问题Object和Function到底是什么关系