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

函数名想象成指针,有助于理解为什么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属性你可以如上面的方法打印一下一个无限的指向

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

推荐阅读更多精彩内容

  • 工厂模式类似于现实生活中的工厂可以产生大量相似的商品,去做同样的事情,实现同样的效果;这时候需要使用工厂模式。简单...
    舟渔行舟阅读 7,852评论 2 17
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,767评论 18 399
  • 本文档内容参考 《JavaScript 闯关记》之函数 函数是一段代码,它只定义一次,但可以被执行或调用任意次。在...
    穿越人海遇见你阅读 1,017评论 0 1
  • 原文: https://github.com/ecomfe/spec/blob/master/javascript...
    zock阅读 3,408评论 2 36
  • Object.create() 实现单继承 Object.assign() 实现多继承 Object.assign...
    鐘濤阅读 446评论 2 0