当前位置: 首页 > Web前端 > HTML

问题38:什么是应用、调用和绑定?有什么区别?

时间:2023-04-02 14:25:15 HTML

三者都是改变this指向的api用法apply:xxx.apply(this,[arg1,arg2])call:xxx.call(this,arg1,arg2)bind:xxx.bind(this,arg1,arg2)主要区别是传递参数的方法和执行方法的区别。apply和call的区别:接受参数的方法不同。bind:不立即执行。并立即申请并调用执行栗子初始状态letPerson=function(name,age){this.name=name;this.age=age;};letStudent=function(){this.class='classA';这。run=function(){console.log(this);};};letstudent=newStudent();student.run();可以看到打印出来了此时指向Student构造函数,与Person构造函数无关使用apply将this改成letPerson=function(name,age){this.name=name;this.age=age;};letStudent=function(){this.class='classA';this.run=function(){Person.apply(this,['xiaoming',20]);控制台日志(这个);};};letstudent=newStudent();student.run();此时这已经是它指向Person构造函数。使用call将其更改为指向letPerson=f函数(姓名,年龄){this.name=姓名;this.age=age;};letStudent=function(){this.class='classA';this.run=function(){Person.call(this,'小明',20);控制台日志(这个);};};letstudent=newStudent();student.run();这个时候,这个有已经指向Person构造函数。使用bind将this更改为指向letex='';letPerson=function(name,age){this.name=name;this.age=age;};letStudent=function(){this.class='classA';this.run=function(){ex=Person.bind(this,'小明',20);控制台日志(这个);};};letstudent=newStudent();student.run();ex();如果你使用bind,this的改变需要执行才能生效总结:使用apply,call,bind确实可以改变this的方向,但是原来对象的属性也会随之传递+前端面试题/笔记]https://github.com/noxussj/In...[大数据可视化图表插件]https://www.npmjs.com/package...[使用THREE.JS实现3D城市建模(珠海市))]https://3d.noxussj.top/

最新推荐
猜你喜欢