1. 除了new Function('str','console.log(str)'); new出的对象是function,其他的都是Object。
凡是通过 new Function() 创建的对象都是函数对象,其他的都是普通对象。其实,不管匿名函数
2.函数对象都有原型对象。
普通对象没有prototype,但有__proto__属性。
3.原型对象其实就是普通对象。但Function除外,它的原型是函数对象。但是这个函数对象没有原型对象,也就是没有prototype属性。
4.匿名函数对象的原型是Object,实名函数对象的原型是它自己。
匿名函数是什么?
var f2 = function(){};
var f3 = new Function('str','console.log(str)');
这样创建的都是匿名函数
实名函数是什么?
function f1(){};
为什么会有这样的区别??
从这句console.log(f1.prototype) //f1 {} 的输出就结果可以看出,f1.prototype就是f1的一个实例对象。就是在f1创建的时候,创建了一个它的 实例对象并赋值给它的prototype,基本过程如下:
var temp = new f1();
f1. prototype = temp;
所以,Function.prototype为什么是函数对象就迎刃而解了,上文提到凡是new Function ()产生的对象都是函数对象,所以temp1是函数对象。
var temp1 = new Function ();
Function.prototype = temp1;