JS原型的问题Object和Function到底是什么关系

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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到底是什么关系的主要内容,如果未能解决你的问题,请参考以下文章

js继承

原型链

js_原型链的问题

重温js——原型和原型链

关于Function和Object之间先后问题的相关研究

JS 究竟是先有鸡还是有蛋,Object与Function究竟谁出现的更早,Function算不算Function的实例等问题杂谈