• javascript函数的几个相关概念


    ---------------------------------------------------------------
    概念1. 一个函数被定义, 实际上就是创建了一个Function类的对象.
    ---------------------------------------------------------------

    在以下4种方法等效的方法定义中,可清晰看到上述结论

    方法1(标准)
    function showText(text)
    {
        alert(test);
    }
    showText("hi, tomsui!~");

    方法2
    show = function showText(text)
    {
        alert(text);
    }
    show("hi, tomsui!~");

    方法3(匿名方法)
    show = function(text)
     {
         alert(text);
     }
     show("hi, tomsui!~");

    方法4(显式定义对象)
    show = new Function("text","alert(text);");
    show("hi, tomsui!~");

    注意: 作为一个对象,肯定会有默认的toString(),可以直接打印这个对象,其实就是函数体本身:
          alert(show)        // function anonymous(text) { alert(text); }
          alert((showText))  // function showText(text)  { alert(test); }


    ---------------------------------------------------------------
    概念2.  Function类的对象有一个prototype属性
    ---------------------------------------------------------------
    这个prototype属性是一个对象:

    function showText(text)
    {
        alert(test);
    }
    alert(showText.prototype);             // [object, Object]
    alert(typeof(showText.prototype));     // object
    alert(showText.prototype.constructor); // function showText(text) { alert(test); }

    构造器的prototype属性作为一个object, 本身存在一个不可for-in的属性"constructor",指向该构造器本身(打印出来的话是函数体定义)

    注意: "Function类的对象",不是每一个普通对象(通过new关键字生成)都有prototype属性的!


    ---------------------------------------------------------------
    概念3.  Function类的对象有一个constructor属性
    ---------------------------------------------------------------

    function showText(text)
    {
        alert(test);
    }

    alert(showText.constructor);          // function Function() { [native code] }
    alert(typeof(showText.constructor));  // function

    关于Function类的对象(showText函数)的constructor属性:
    1) 是"一段不可显示的本地代码" (而不像是showText的prototype属性一样是一个对象)
    2) 它的类型是"function"


    ---------------------------------------------------------------
    总结.   prototype属性,constructor属性, construct属性 概述
    ---------------------------------------------------------------

    如果把对象( 根据一个对象是否为Function对象 )分为两类:
    a. 一个函数对象  (Function类的对象)
    b. 一个普通对象  (通过new关键字结合构造函数创造的"非Function类"对象)

    那么:
    1. 函数对象存在prototype  属性, 而普通对象不存在;
    2. 函数对象存在constructor属性, 普通对象不存在; constructor属性的type是"function",toString后是一段“本地代码”(native),
    3. 普通对象存在construct  属性, 函数对象不存在; construct  属性是type是"function" ,toString后是“函数代码本身”,

  • 相关阅读:
    python 运用numpy库与matplotlib库绘制数据图
    pil库的介绍与应用
    使用jieba库与wordcloud库第三方库进行词频统计
    将驼峰命名转为连字符格式
    数组去重的多种方法
    数字美化-pretty-number 将数字转换成k 、w
    npm方式开发的插件使用yarn link的方式引入到目标项目中,在目标项目中无法读取到Vue,vuex, vue-i18n的解决方法
    eslint配置
    webpack 中的 process.env
    类型“VueConstructor<Vue>”上不存在属性“install”。ts(2339)
  • 原文地址:https://www.cnblogs.com/dsliang/p/1358427.html
Copyright © 2020-2023  润新知