6-1 当没有参数、第一个参数为undefined、第一个参数为null时
var obj = {
fnOne:function(){ return this }.bind(),
fnTwo:function(){ return this }.bind( undefined ),
fnThree:function(){ return this }.bind( null )
}
//注意:这三种情况是使this指向window对象,而不是不去改变this指向,所以这里的this还是不会指向obj
obj.fnOne() // window
obj.fnTwo() //window
obj.fnThree() //window
[](
)二、call
----------------------------------------------------------------
> 特点:
>
> 1.返回值取决于目标函数的返回值
> 2.用call的第一个参数对象来代替调用目标函数的对象,以此来改变目标函数体内的this指向
> 3.调用call方法时的第二个参数做为目标函数的第一个参数,将第二个作为第三个以此类推
> 作用:
>
> 1.用于继承,例如子构造函数继承父构造函数
> 2.改变绑定函数运行时的this指针。
1-1 返回值取决于目标函数的返回值
function fn(){ return {name:"call"} }
fn.call() // {name: "call"}
2-1 改变目标函数体内的this指向 , 相当于使用第一个参数对象调用
function fn(){ return this }
fn.call( { name : "call" } ) // {name: "call"}
3-1 参数位置
function fn(a, b, c){ return arguments }
fn.call( { name : "call" } , 1 , 2 , 3 ) //Arguments [1, 2, 3]
1-2 用于继承
function parent(name, age) {
this.name = name;
this.age= age;
}
function child(name, age) {
parent.call(this, name, age);
this.class = ‘三年级二班’;
}
var xiaoming = new child("小明" , 18)
[](
)三、apply
-----------------------------------------------------------------
> 特点:
>
> 1.与call方法一样唯一不同的地方就是apply的第二个参数是一个数组,数组的第一个元素对应目标函数的第一个参数,以此类推
> 作用:
>
> 1.与call方法一样
1-1 参数
function fn(a, b, c){ return a+b+c }
fn.apply({name:"apply"} ,[1,2,3]) //6
[](
)总结
------------------------------------------------------------
### 最后
我可以将最近整理的前端面试题分享出来,其中包含**HTML、CSS、JavaScript、服务端与网络、Vue、浏览器、数据结构与算法**等等,还在持续整理更新中,希望大家都能找到心仪的工作。
**[CodeChina开源项目:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】](https://ali1024.coding.net/public/P7/Web/git)**
**篇幅有限,仅展示部分截图:**
![](https://s2.51cto.com/images/20210922/1632240205167800.jpg)
![](https://s2.51cto.com/images/20210922/1632240206639325.jpg)
![](https://s2.51cto.com/images/20210922/1632240206148922.jpg)
原创文章,作者:kepupublish,如若转载,请注明出处:https://blog.ytso.com/167244.html