如何区分对象还是函数
我超我才发现我的VSCode皮肤文字颜色蓝色是对象,绿色是函数!!!!!!一看就懂~
argumens是什么
arguments是包含了所有参数的伪数组,可以用Array.from()变为数组
如果不加’use strict’,this会尽量把你传的东西变成对象
this是什么
详见这篇文章
https://zhuanlan.zhihu.com/p/23804247
如何传 arguments
调用 fn 即可传 arguments
fn(1,2,3) 那么 arguments 就是 [1,2,3] 伪数组
如何传 this
目前可以用 fn.call(xxx, 1,2,3) 传 this 和 arguments,而且 xxx 会被自动转化成对象(JS 的糟粕)
为什么要用this
我们先写函数,后面再引用,需要用一个东西代表后面传进来的参数
我们想让函数获取对象的引用,但是并不想通过变量名做到
Python 通过额外的 self 参数做到,JS 通过额外的 this 做到
JS 在每个函数里加了 this,用 this 获取那个未知对象
let person = {
name: 'frank',
sayHi(this){
console.log(`你好,我叫` + this.name)
}
}
person.sayHi()
person.sayHi() 相当于 person.sayHi(person),然后 person 被传给 this 了(person 是个地址)这样,每个函数都能用 this 获取一个未知对象的引用了。
也就是说,person.sayHi()会隐式地把 person 作为 this 传给 sayHi
this的两种使用方法
隐式传递
fn(1,2) // 等价于 fn.call(undefined, 1, 2)
obj.child.fn(1) // 等价于 obj.child.fn.call(obj.child, 1)
显示传递
fn.call(undefined, 1,2)
fn.apply(undefined, [1,2])
神志不清胡言乱语
如果函数用一个对象来调用,那么这个函数里面的this就是前面那个对象
如:obj.fn(p1) === obj.fn.call(obj,p1)
变态的来了:jQuery(‘.test’)等于什么?
答案是:window.jQuery(window,’.test’)
其中window是对象,jQuery是函数,’.test’是选择器