文章目录
前言
1.thisArg
在 function 函数运行时使用的 this 值。请注意,this可能不是该方法看到的实际值:如果这个函数处于非严格模式下,则指定为 null 或 undefined 时会自动替换为指向全局对象,原始值会被包装。
this指向:非严格模式下,指向window。严格模式下,为undefined。
一、apply / call / bind 三者的区别?
- 首先他们三者都是用来改变this的指向的
- 三者的第一个参数都是this要指向的对象,也就是指定上下文
apply和call两者都可以利用后续参数传参,但是传参的方式不一样,apply是数组,call则是正常传参形
bind是返回对应函数,便于稍后调用,apply,call则是立即调用
二、代码
代码如下(示例):
Function.prototype.mycall = function(object){
//定义一个obj,如果有object就使用object,如果没有就使用window
let obj = object || window;
//在obj里定义一个fn属性,再把当前this传进去,谁调用this,obj就指向谁
obj.fn = this;
let arg = [...arguments].slice(1);
let result = obj.fn(...arg);
return result
}
let sum = {a:12,b:15}
function test(){
console.log(sum);
}
test.mycall(sum,10,100)
实现思路主要是:
判断是否是函数调用,若非函数调用抛异常
通过新对象(context)来调用函数
①给context创建一个fn设置为需要调用的函数
②结束调用完之后删除fn