在ES5中,如果想要知道this指向谁,就要看当前的这个函数是在哪里调用的,函数的 this 关键字在 JavaScript 中的表现略有不同,此外,在严格模式和非严格模式之间也会有一些差别。
js中的this指
在事件中调用,this就是当前触发事件的元素
在对象中调用,this就是当前对象
在全局调用,this就是window
在面向对象中,this就是当前用`new`关键字创建出来的对象
箭头函数中的this指向
在普通函数中的this:
1. this总是代表它的直接调用者(js的this是执行上下文), 例如 obj.func ,那么func中的this就是obj
2.在默认情况(非严格模式下,未使用 'use strict'),没找到直接调用者,则this指的是 window (约定俗成)
3.在严格模式下,没有直接调用者的函数中的this是 undefined
4.使用call,apply,bind(ES5新增)绑定的,this指的是 绑定的对象
箭头函数与普通函数区别
1.箭头函数是匿名函数,箭头函数不能作为构造函数使用 ,不能使用new 方法
2.箭头函数的this,始终指向父级上下文
3.箭头函数没有原型属性
4.箭头函数没有Arguments
5.箭头函数不能使用call apply bind 直接修改它的this指向 但可以用他们传参
普通函数的arguments和类数组转换成数组
arguments转换成数字的方法
1.比较常用的方法
function argument() {
var arr = [];
for (var i = 0; i < arguments.length; i++) {
arr.push(arguments[i]);
}
return arr;
}
2.Array.prototype.slice.call()
function arguments() {
console.log(arguments instanceof Array); // false
var argsArray = Array.prototype.slice.call(arguments);
console.log(argsArray instanceof Array); // true
}
3.扩展运算符,因为它是一个对象
function argument () {
console.log(arguments instanceof Array); // false
var argsArray = [...arguments ];
console.log(argsArray instanceof Array); // true
}
4.Array.from(); ES6里的方法
function argument () {
console.log(arguments instanceof Array); // false
var argsArray = Array.from(arguments);
console.log(argsArray instanceof Array); // true
}
类数组转换成数组的方法
1.ES6语法 Array.from(arr)
2.用Array.prototype.slice.call(elems)方法转化为数组 或 [].slice.call(elems)
3.用[ ...elems ]方法转化为数组
4.用Array.prototype.forEach.call(elem,callback)方法
5.用Array.prototype.forEach.apply(elem,[callback])方法
6.用bind方法