js中Fucntion的意义
在js中,我们常常如下方式写函数:
function fn(){console.log("这是一个函数.");
};
fn();
在js中,函数本质就是一个对象。
那么,结合我的上一篇文章:通俗讲解javascript的实例对象、原型对象和构造函数以及它们之间的关系-CSDN博客
刚刚写的这个函数 ,实际上是一个“实例对象”。
那么,它就有原型函数(类)和构造函数。
function fn(){console.log("这是一个函数.");
};
console.log(fn.__proto__);
console.log(fn.__proto__.constructor)
接下来,需要逆向思维一下:如果知道了构造函数,是不是就可以new出实例对象呢?
参考如下代码:
//构造函数
function Person(name,age)
{this.name=name;this.age=age;this.sleep=function(){console.log("睡觉");}
}//p1是实例对象
var p1=new Person("张三",20);
接下来,我们的构造函数成了Function(),那么new它一下,就出来了实例对象【也就是函数】。
var fn1=new Function("console.log('我是一个函数');");
console.log(fn1);
fn1();
由此可以得到两点:
(1)函数fn1实际上是Function构造函数的实例对象;
(2)Funciton的参数,就是函数fn1的函数体。
所以,在有些场景下,就可以将普通写法的fn,变成用Function表示的形式,如:
!function(){debugger;
}();
等同于
var fn=new Function("debugger");
fn();
或者
new Function("debugger")();