《函数arguments和this,bind绑定》

90 阅读2分钟

arguments

  • 是包含所有参数的伪数组
    没有数组共有属性(push、pop)的就是伪数组

image.png

  • Array.from():可以把任何不是数组的东西变成数组

this

image.png

如果不给任何的条件,那么this默认指向Window

image.png

  • 如何传this
    目前可以用 fn.call()this
  • 如果传的this不是对象,那么JS会自动帮你封装成对象
    传数字1,就会变成对象1
    undefined,就会变成全局变量 window

image.png

当传fn.call(xxx,1,2,3)时,xxx会被自动转化为对象,而后面的1,2,3就是arguments
call的参数被分成两段

image.png

取消封装

在声明中加'use strict'取消封装
传什么,this就是什么

image.png

this 总结

  • 我们想让函数获取对象的引用(对象名不知道,但我们知道它肯定存在)
  • 但是并不想通过变量名做到
  • 通过额外的this做到
  • person.sayHi()会把person自动传给sayHi(传地址),sayHi可以通过this引用person

image.png

大师调用法(call)

  • person.sayHi.call(person)
  • call后面传什么,this就是什么
    person.sayHi.call({name:'jack'})传递一个对象,那么this就是一个对象,this.name就是jack
  • 相当于:把一个函数放到对象上面,但这个函数和这个对象没有任何关系,只是恰好出现在一起而已

image.png

调用call时,即使用不到this,也要找个东西占位(一般用undefined),否则会默认参数第一个为this

image.png

forEach

用this(数组的隐藏函数中forEach就含有this
这个函数的作用:遍历当前数组
this就是当前数组,待传递

image.png

意思是forEach2等于一个函数(这个函数接收另一个函数fn),然后遍历this,对于this里面的每一项,调用fn,同时传递一个i

image.png

this不一定是数组,也有可能是对象

this传递的两种方法

隐式传递

   fn(1,2) //等价于fn.call(null,1,2)
   obj.child.fn(1) // obj.child.fn.call(obj.child.1)
   

显示传递

  • 显示传递\

    fn.call(undefined,1,2)
    fn.apply(undefined,[1,2])`只是后面的参数要传数组而已
    

绑定this

image.png

版权声明:本文为CSDN博主「一生注定学霸命」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:blog.csdn.net/qq_40282016…