问题引入: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
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。