1

问题引入:new Function('msg','alert(msg)');
分析某源码的时候看到这样一段代码,突然一个问题萌发了:js中对象与函数到底有什么样的关系;
首先看几段代码:

function test() {};
console.log(test instanceof Object);    //    true

结论:函数是一种对象

typeof Object; // function

结论:Object是一种函数

function test() {
    this.name="test"
};
var obj = new test();

结论:对象又可以通过函数来创建

根据W3C的解释JS中所有事物都是对象,这样以来都已经绕晕了。

其实后来仔细回味想想他们之前并没有矛盾:
前提条件,函数是一种特殊的对象,每次加圆括号时可以调用一段代码段;
js给我们提供了两个函数
1.Function,让我们来创造函数(特殊的对象) 如 new Funtion();

2.Object,让我们来创造普通的对象, 如 new Object();

Function中有个属性prototype 所有函数的__proto__ 属性都指向改属性 如:

function test() {};
test.__proto__ === Function.prototype;

test.__proto__... === Object.prototype;

Object.__proto__ === Function.prototype;

结论一:实例对象(函数)的__proto__指向Object(Function)的prototype;
结论二:对象的__proto__原型链 上会有一个指向 Object.prototype


handsome
14 声望0 粉丝