郑州地区寻求专业佛山网站开发公司,以定制高质量网站服务吗?
摘要:郑州网站开发外包,佛山网站专业制作,企业服务包括哪些,百科创建手写实现call() apply() bind()函数是很经典的问题,但是能掰扯清楚的文章确实不算多,于是笔者才决定写
郑州网站开发外包,佛山网站专业制作,企业服务包括哪些,百科创建手写实现call() apply() bind()函数是很经典的问题#xff0c;但是能掰扯清楚的文章确实不算多#xff0c;于是笔者才决定写下本文#xff0c;希望能给读者带来一些启发#xff0c;如有错误欢迎指正。
目录
补充知识
函数中的this指向 类数组对象arguments
call()
原理…手写实现call() apply() bind()函数是很经典的问题但是能掰扯清楚的文章确实不算多于是笔者才决定写下本文希望能给读者带来一些启发如有错误欢迎指正。
目录
补充知识
函数中的this指向 类数组对象arguments
call()
原理
详细实现
验证
apply()
原理
详细实现 验证
bind()
原理
详细实现
验证 补充知识
在往下看具体的实现之前我们先要了解一些前置补充知识
函数中的this指向
函数中的this指向是在函数被调用的时候确定的也就是执行上下文被创建时确定的。
在一个执行上下文中this由调用者提供由调用函数的方式来决定。
1.方法调用模式
哪个对象调用函数object.method()this就指向哪个对象
let obj{a:1,b:2,
}
obj.testfunction(){let a3console.log(this,this.a)
}
obj.test()
//结果为 { a: 1, b: 2, test: [Function: test] } 1
//test的this指向obj
2.独立调用模式
独立调用时指向window严格模式下指向undefined
// 例子1
window.a111
var test1 function(){let a123console.log(this.a)
}
test1() // 输出结果为111说明此时test1的this指向是全局的window// 例子2
window.a111
var obj {a:222
}obj.test2function(){let a333;console.log(this.a,第一个)let funcfunction(){console.log(this.a,第二个)}func()
}obj.test2()
// 输出结果为
// ’222 第一个‘ 说明this指向是obj,因为test2是方法调用
// ‘111 第二个’ 说明this指向是window因为func是独立调用3.构造函数模式
js中,我们通过new关键词来调用构造函数此时this会绑定在该实例对象上
window.a111
test3function(){this.a444
}
test3()
console.log(window.a)
//结果为‘444’说明this指向的是windows因为上面test3的调用模式是独立调用let newObj new test3()
console.log(newObj.a)
// 结果为‘444’说明this指向的是newObj因为上面的test3的调用是作为构造函数的形式调用 类数组对象arguments
arguments只在函数中存在(箭头函数除外)的伪数组具有length可以通过下标访问但是不具有数组的方法, 比如push(),pop()等数组常用的方法存储了我们传入的所有形参。
