apply、call、bind有什么区别?
发布时间:2020-12-14 04:34:40 所属栏目:大数据 来源:网络整理
导读:使用 apply var a = { name : "Cherry" ,func1: function () { console.log( this .name) },func2: function () { setTimeout( function () { this .func1() }.apply(a), 100 ); } }; a.func2() // Cherry 使用 call var a = { name : "Cherry" ,func2: func
使用 applyvar a = { name : "Cherry",func1: function () { console.log(this.name) },func2: function () { setTimeout( function () { this.func1() }.apply(a),100); } }; a.func2() // Cherry 使用 callvar a = { name : "Cherry",func2: function () { setTimeout( function () { this.func1() }.call(a),100); } }; a.func2() // Cherry 使用 bindvar a = { name : "Cherry",func2: function () { setTimeout( function () { this.func1() }.bind(a)(),100); } }; a.func2() // Cherry apply、call、bind 区别刚刚我们已经介绍了 apply、call、bind 都是可以改变 this 的指向的,但是这三个函数稍有不同。 在 MDN 中定义 apply 如下;
语法:
apply 和 call 的区别其实 apply 和 call 基本类似,他们的区别只是传入的参数不同。 call 的语法为: fun.call(thisArg[,arg1[,arg2[,...]]]) ? 所以 apply 和 call 的区别是 call 方法接受的是若干个参数列表,而 apply 接收的是一个包含多个参数的数组。 var a ={ name : "Cherry",fn : function (a,b) { console.log( a + b) } } var b = a.fn; b.apply(a,[1,2]) // 3 var a ={ name : "Cherry",b) { console.log( a + b) } } var b = a.fn; b.call(a,1,2) // 3 bind 和 apply、call 区别我们先来将刚刚的例子使用 bind 试一下var a ={ name : "Cherry",b) { console.log( a + b) } } var b = a.fn; b.bind(a,2) 我们会发现并没有输出,这是为什么呢,我们来看一下 MDN 上的文档说明:
所以我们可以看出,bind 是创建一个新的函数,我们必须要手动去调用: var a ={ name : "Cherry",2)() // 3 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |