let obj1 = {
name: '123',
getName: function () {
return this.name
}
}
let obj2 = {
name: '456'
}
console.log(obj1.getName()) // 123
console.log(obj1.getName.call(obj2)) // 456
Function.prototype.myCall = function (context = window) {
let args = Array.from(arguments).splice(1)
if (typeof this !== 'function') return
// 关键在于利用对象的特性,直接在将函数指向新的对象,并指向该函数
!context.__fn__ && context.__fn__ = this
let res = context.__fn__(...args)
// 删除该对象上的属性
delete context.__fn__
return res
}
console.log(obj1.getName.myCall(obj2)) // 456
相关文章
- 01-11js系列之——call/apply/bind基础重写以及this的指向问题
- 01-11js中的call()、apply()、bind()方法详解
- 01-11关于js的call、apply、bind,并重写
- 01-11关于js中apply方法和call方法的理解
- 01-11js 中 call() apply() bind() 的用法
- 01-11call、apply、bind三者之间的用法和区别,并手写实现
- 01-11js'中的apply和call和bind的用法
- 01-11理解JS中的call、apply、bind方法(*****************************************************************)
- 01-11深入理解js中的apply、call、bind
- 01-11兄台息怒,关于arguments,您的想法和大神是一样一样的----闲聊JS中的apply和call