美文网首页
函数的三个角色:普通函数、类、普通对象

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

作者: gaoqizhuhui | 来源:发表于2017-07-25 20:25 被阅读0次

    函数在整个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这个类的原型

    相关文章

      网友评论

          本文标题:函数的三个角色:普通函数、类、普通对象

          本文链接:https://www.haomeiwen.com/subject/sejgkxtx.html