函数的三个角色:普通函数、类、普通对象

函数在整个JS中是最复杂也是最重要的

1、一个函数存在了多面性:

”普通函数“:它本身就是一个普通的函数,执行的时候形成私有作用域(闭包),形参赋值,预解释,代码执行,执行完成后桟内存销毁/不销毁
”类“:它有自己的实例,也有一个叫prototype属性是自己的原型,它的实例都可以指向自己的原型
”普通对象":和var obj={ }中的obj一样,就是一个普通的对象,它作为对象可以有一些自己的私有属性,也可以通过______proto__找到Function.prototype

以上这三者之间没有必然关系

function Fn(){
     var num=500;     
     this.x=100;
}
Fn.prototype.getX=function(){
     console.log(this.x);
};
Fn.aaa=1000;
var f=new Fn;  //Fn中的this是f

a、f.num; f.aaa; //--->undefined,undefined
因为var f=new Fn,所以这里的Fn是一个类,f为实例。num和aaa既不是私有属性也不是公有属性,所以不赋给实例f,所以均为undefined

b、var res=Fn(); //Fn中的this是window res=undefined
因为var res=Fn();说明Fn是一个普通函数,按作用域链来看,Fn()前面没有“ . ”,所以this指的是window

c、Fn.aaa;此时Fn是对象

image.png
分析:

Function:函数类,所有的函数都是它的一个实例,所以函数也算是对象数据类型,所以每个函数也具有______proto__属性。(世间万物皆对象)
——————————————————————————————————————————
函数本身也有一些自己的属性:
a、length:形参的个数
b、name:函数名
c、prototype:类的原型,在原型上定义的方法都是当前Fn这个类实例的公有方法
d、______proto__:把函数当作一个普通的对象,指向Function这个类的原型

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、JavaScript基础知识回顾 1.1 JavaScript 1.1.1 javascript是什么? Ja...
    福尔摩鸡阅读 1,368评论 0 7
  • 0 写在前面的话 大多数的面向对象编程语言中,比如C++和Java,在使用他们完成任务之前,必须创建类(class...
    自度君阅读 1,024评论 0 3
  • 1,javascript 基础知识 Array对象 Array对象属性 Arrray对象方法 Date对象 Dat...
    Yuann阅读 972评论 0 1
  • 每一个生命都是如此神奇而来之不易。 晚上和老婆看了BBC的纪录片——《人体的奥秘》的第一集,我们第一次如此直观清晰...
    猛虎哥阅读 442评论 2 2
  • APP在真机上运行是离不开开发证书,然而想获取这些证书我们首先需要申请开发者账号(账号分为 个人、公司、企业三种)...
    悟2023阅读 1,646评论 8 16