【转载】JS中的bind 、call 、apply

2-1 将函数中的this固定为调用bind方法时的第一个参数

function fn(){ return this }

var bindFn = fn.bind({name:“绑定函数”}) //ƒ fn(){ return this }

3-1 以后无论由哪个对象调用绑定函数,绑定函数中的this依然是{name:“绑定函数”}

function fn(){ console.log(this) }

var bindFn = fn.bind({name:“绑定函数”})

bindFn() //等同于window对象调用 , this依然指向{name:“绑定函数”}

var obj = {name:“obj”};

obj.fn = bindFn;

obj.fn() //由普通对象调用 ,this依然指向{name:“绑定函数”}

var arr = [bindFn];

arr0 //由数组调用 , this依然指向{name:“绑定函数”}

setTimeout(bindFn , 200); //作为回调函数 , this依然指向{name:“绑定函数”}

clearTimeout(1);

4-1 如果绑定函数作为构造函数,已经捆绑的this会被忽略掉,this依然指向实例对象

function Person(name){

this.name = name;

}

var bindPerson = Person.bind({name:“绑定函数”})

new bindPerson(“张三”) // Person {name: “张三”}

5-1 预设参数

function fn(a,b,c,d){

console.log(a,b,c,d) // 1 ,2 ,3 ,4

}

var bindFn = fn.bind({name:“绑定函数”} , 1 ,2); // 拷贝原函数时的第2个参数开始往后称为预设参数

bindFn(3,4); //调用绑定函数时的第一参数则排在预设参数的后面

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);

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!**

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值