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)