函数的内部属性arguments和this
arguments是函数调用的时候是传递给函数的参数代列表,有length属性 , 获取函数的形参部分
this
this是函数运行时产生的函数, 自动产生的内部对象,跟函数在哪里定义没有关系 ,跟谁调用有关系
1.在函数外部使用this,this指的是window对象;
2.在某些情况下的函数内部调用this,this指的也是window对象;
3.函数被new来调用,那么函数内部的this是new 关键字新创建的上级对象;
4.函数作为某个对象的方法调用,函数内部的this指的是这个对象;
5.事件监听函数内部的this,指的是触发这个事件的元素。
每个函数都有一个属性 length 和prototype
length 是当前函数接收命名的参数的(形参)个数 arguments.length是实参的个数
非继承而来的方法call ()和aplly() 通常使用来扩充函数的作用域
这两个方法的作用是一样的,但是使用call()和apply()方法时,就会改变this的指向
apply()方法 接收两个参数,一个是函数运行的作用域(this),另一个是参数数组。
call()方法 第一个参数和apply()方法的一样,但是传递给函数的参数必须列举出来
什么情况下用apply,什么情况下用call
在给对象参数的情况下,如果参数的形式是数组的时候,比如apply示例里面传递了参数arguments,这个参数是数组类型,并且在调用Person的时候参数的列表是对应一致的(也就是Person和Student的参数列表前两位是一致的) 就可以采用 apply , 如果我的Person的参数列表是这样的(age,name),而Student的参数列表是(name,age,grade),这样就可以用call来实现了,也就是直接指定参数列表对应值的位置(Person.call(this,age,name,grade));
bind(this) 返回一个新的函数, 内容是一样,但是this是不一样的,通常用来绑定this