概述
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<script type="text/javascript">
// bind()方法会给予一个现有的函数,把这个函数复制,再创建一个新的函数,并永久绑定this,还可以绑定部分参数
// 例子:算薪资 = 底薪 + 奖金
function calc(base,bonus){
console.log(this.ename + "的总工资为:"+ (base + bonus));
}
var lilei = {ename : "李磊"};
var hmimi = {ename :"韩梅梅"};
calc(3000,5000);//undefined的总工资为:8000(因为这个时候的this指向的是window)
//使用call关键字,将calc的this指向调用该方法的对象
calc.call(lilei,900,4000);
calc.call(hmimi,900,4000);
//call方法只能使用一次,下次要看工资的时候,又要调用,很麻烦,所以使用bind()函数可以解决这个问题
var lilei_calc = calc.bind(lilei,9000);//bind第一个参数绑定的是对象,让this指向调用该方法的对象,后面的参数是一个一直会用的参数
lilei_calc(400,)
lilei_calc(300,)
lilei_calc(200,)
// 需求: 创建一个对象,有name、age、sex、tel
利用apply改变this指向时,可以和arguments搭配使用
function Person(){
this.name = arguments[0];
this.age = arguments[1];
}*/
var person = new Person("jack",25);
var obj = {}
// Person.call(obj);//让Person中所有this的预设指向,都改变成obj;并且可以在后续追加参数
// 需求: 创建一个对象,有name、age、sex、tel
function Student(name,age,sex,tel){
//call借用别人的方法,完成自己的事情
//call 需要把实参按照形参的个数传进去
// Person.call(this,name,age);// this -->window
//apply 需要创一个arguments 里面需要注意实参和新参的顺序
Person.apply(this,[name,age]);
//call 和 apply的作用是一样的,只不过传参方式不一样
this.sex= sex;
this.tel = tel;
}
/*总结:call apply bind
call和apply:都是临时借用一个函数,并替换this的指向,他们都是立即执行
他们的不同之处:传参的方式不一样
bind:是基于现在已经存在的函数,复制这个函数,并永久绑定this为指定对象,并且可以绑定一个一直都会用到的参数
在创建的时候,之创建,不执行,要执行的话,需要调用
在什么情况下选择这三红方法:
函数在创建的时候需要立即执行:call / apply
函数在创建的时候不需要立即执行:bind
*/
</script>
</head>
<body>
</body>
</html>
最后
以上就是野性猎豹为你收集整理的bind,apply,cell的区别以及用法的全部内容,希望文章能够帮你解决bind,apply,cell的区别以及用法所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复