自学内容网 自学内容网

js中Fucntion的意义

在js中,我们常常如下方式写函数:

function fn(){
    console.log("这是一个函数.");
};
fn();

69a1366395bf42598f5587808f530fe3.png

 在js中,函数本质就是一个对象。

那么,结合我的上一篇文章:通俗讲解javascript的实例对象、原型对象和构造函数以及它们之间的关系-CSDN博客

刚刚写的这个函数 ,实际上是一个“实例对象”。

那么,它就有原型对象(类)和构造函数。

function fn(){
    console.log("这是一个函数.");
};
console.log(fn.__proto__);
console.log(fn.__proto__.constructor)

1cb3c4de3193414db3fff0c02c1629c7.png 

接下来,需要逆向思维一下:如果知道了构造函数,是不是就可以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();

c4c81de773474cd1996ccb0c4338013e.png 

由此可以得到两点:

(1)函数fn1实际上是Function构造函数的实例对象;

(2)Funciton的参数,就是函数fn1的函数体。 

所以,在有些场景下,就可以将普通写法的fn,变成用Function表示的形式,如:

!function(){
    debugger;
}();

等同于

var fn=new Function("debugger");
fn();

或者

new Function("debugger")();

 

 

 

 


原文地址:https://blog.csdn.net/kxltsuperr/article/details/142489786

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!