美文网首页
函数的模拟重载(深入理解)以及内部属性

函数的模拟重载(深入理解)以及内部属性

作者: codeSirCao | 来源:发表于2017-06-12 21:52 被阅读28次
    函数名想象成指针,有助于理解为什么ECMAScript为什么没有函数重载的概念

    重载:重新全部的加载
    废话不多说直接列子
    function add(num){
    return num+100
    }
    function add(num){
    return num+200
    }
    add(100) //300
    有人会说最后一个函数覆盖了第一个 这样说似乎也是对的 。 但是其实是最后一个函数add函数名字覆盖的指针覆盖了第一个 记住函数名师指针 指向函数函数声明就相当于开辟了一个内存空间JS不允许访问内存的所以只是一个指针
    其实这个样理解
    var add=function(num){
    return num+100}
    var add=function(num){
    return num+200}
    第二个add这个函数名字覆盖的第一个add他们是指针指针指针 并没有改变函数


    以上纯属自己理解如有错误请指出

    所以说JS没有函数重载只会模拟函数重载

    函数的内部属性

    二个特殊的属性:argument 和this
    arguments是一个类数组为什么是类数组 他是一个数组但是也有函数里面的一些指针
    作用:主要用途是保存函数的参数 (实参)
    他的属性:
    callee 是一个指向拥有argument函数本身的一个指针(在递归 阶乘中使用解决函数名的耦合性)
    this:不多介绍 函数最终被谁调用一般都指向谁(一般用在构造函数中使用)

    属性和方法

    万物皆对象 函数也不例外所以也有自己的属性和方法
    二个属性方法
    length 形参的长度
    prototype 保存函数实例方法的真正所在 (这个很重要的一个属性对于继承来说)es5中这个属性不能枚举(枚举就是for in遍历)
    apply/call 这两个都是在特定的作用域调用函数(设置函数体中this对象值一般用于继承)


    小东西
    自己试验 新建一个add函数 控制台打印add 然后在打印add.prototype
    在打印add.prototype.constructor 然后在add.prototype.constructor.prototype 大概知道了吧 你可以无限点下去 无限循环下去 这个就是指针 是不是感觉懂了!!!
    另外这个proto有指向这个函数的prototype属性你可以如上面的方法打印一下一个无限的指向

    相关文章

      网友评论

          本文标题:函数的模拟重载(深入理解)以及内部属性

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