欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

2022 个前端面试笔试问题及答案

最编程 2024-07-19 07:38:49
...
相同点:都是重定向this指针的方法。
不同点:call和apply的第二个参数不相同,call是若干个参数的列表。apply是一个数组

手写一个call方法


// 在这之前需要重新认识一下call方法的执行操作
let mock = { value : 1 };
function mockNum(){
console.log('value',this.value)
}
mockNum.call(mock) // 改变了函数中this的指向,当前this指向了mock对象

转换一下实现方法就是

let mock = {
value:1;
mockNum:function(){
console.log('value',this.value)
}
}
mock.mockNum();
所以经过上面这个操作的演化而来的结果就是如下步骤:
1. 将函数设为一个对象的属性
2. 并将这个函数的属性调用
3. 删除该函数

Function.prototype.Mycall = function(context){
let obj = context || window;
obj.fn = this; // 这一步可以看做是this其实就指的当前函数。
let args = [...arguments].slice(1); // 返回删除第一个元素的数组;
let result = obj.fn(...args); // 调用函数
delete obj.fn;
return result;
}

// 操作一下
let mock = { value : 1 };
function mockNum(){
console.log('value',this.value);
}
mockNum.Mycall(mock) // value 1