JS的bind的用法和自定义Bind

本文深入解析JavaScript中bind方法的工作原理及应用,通过实例演示如何改变函数执行时的this指向,并自定义实现bind方法,适用于前端开发人员提升技能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

实例一:

var adc="dema";

function show(a,b){

console.log(this.adc,a,b);

}

// show();

var bch={

adc:"hb"

}

// show.apply(bch);

// show.call(bch); 只能借用方法但不创建自己的方法

 

var myShow =show.bind(bch,"sh","ap");

myShow();

实例二:

//单对象编程(this始终保持不变)

var list={

init:function() {

this.my="hanbing";

this.elem=document.getElementsByClassName("but")[0];

this.bindEvent();

},

bindEvent:function() {

this.elem.onclick=this.showMessage.bind(this,"wu",21);

},

showMessage:function(name,age,e) {

//参数从bind的实参参数从第二位左往右

console.log(this,name,age,e);//。。。 ‘wu’ 21 Mouseevent

}

}

list.init();

自定义bind

Function.prototype.mybind=function(target) {

var self=this;

var args=[].slice.call(arguments,1);

var temp =function(){};

var f=function() {

var _arg=[].slice.call(arguments,0);

return self.apply(this instanceof temp ? this :(target || window),args.concat(_arg));

}

temp.prototype=self.prototype;

f.prototype=new temp();

return f;

}

var myshow2 = show.mybind(bch,"1",12);

myshow2();

总结:

function A(){

...

}

var B={}

var x=1,y=3,z=4;

var o=A.bind(B,x,y,z);

1:函数A调用bind时,需要b,x,y,x....;

2:返回新的函数o;

3:执行o() ,具体功能还是A的,只是this的指向变成B|| window

4:执行o(),参数会拼接到x,y,z后一并在内部传递给A;

5:new o() 的构造函数是A(),而且B无任何关系

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值