call方法是JS function中内置的一个方法,主要的作用有两个:
- 改变函数的this指向
- 向函数中传递参数
使用方式如下:
javascript
fn.call(obj, 100, 200)
实现代码示例:
javascript
Function.prototype.myCall = function(ctx, ...args) {
ctx = ctx === undefined || ctx === null ? globalThis : Object(ctx)
// 定义一个符号,使其唯一
const key = Symbol()
// 这样定义,使符号不可枚举
Object.defineProperty(ctx, key, {
value: this,
enumerable: false
})
const r = ctx[key](...args)
// 运行完没用了,就可以删除掉
delete ctx[key]
return r
}
function method(a, b) {
console.log(this, 'this')
console.log(a, b, 'args')
}
const a = {
a: 2
}
method.myCall(a, 2, 3)
// 输出结果:{ a: 2 } this
// 2 3 args
method.myCall(this, 2, 3)
// node 环境没有 this
// 输出结果:{} this
// 2 3 args
method.myCall(1, 2, 3)
// 输出结果:[Number: 1] this
// 2 3 args