apply的“非改变this“的用法】的更多相关文章

说到apply,大家都是知道是改变this指向的,也都会立马和call联系在一起,MDN官网上也是如是说: 其实我们在平常使用call和apply的时候,都是想到他们的改变函数的this的功能, 正如MDN上面说的apply和call只有唯一一点区别,就是:apply方法的二个参数接受的是“参数数组”! 也就是说:apply的第二个“参数数组”最终会打散被调用apply的函数所调用: 因此我们也可以利用这一特性,进行数组的打散的操作,如MDN中所述: 当然我们这里也可以使用ES6的扩张语句,如下…
    eval是一个函数,可以接受一个参数,这个参数可以作为js语句被解释性的执行,利用这个特性,eval和apply结合起来,可以大大简化代码  如下例子 <a class="click" data-click="first">firstClick<a>  //点击后执行函数firstClick <a class="click" data-click="second">secondCli…
首先看一道网易的面试题: var a = { a:"haha", getA:function(){ console.log(this.a); } } var b = { a:"hello" } var getA = a.getA; var getA2 = getA.bind(a); function run(fn){ fn(); } //分别输出 a.getA();//haha getA();//window下面的a对象 run(a.getA);//window下面…
最近开发的过程中遇到了this指向问题,首先想到的是call().apply().bind()三个方法,有些时候这三个方法确实是十分重要,现在我们就把他们的使用方法及异同点讲解一下. 1.每个函数都包含三个非继承而来的方法,call()方法.apply()方法和bind()方法       2.相同点:三者的作用都是一样的,都是在特定作用中调用函数,等于设置函数体内this的值,以扩充函数赖以运行的作用域. 一般来说,this总是指向调用某个方法的对象,但是使用call().apply()和bi…
apply:方法能劫持另外一个对象的方法,继承另外一个对象的属性. Function.apply(obj,args)方法能接收两个参数obj:这个对象将代替Function类里this对象args:这个是数组,它将作为参数传给Function(args-->arguments) call:和apply的意思一样,只不过是参数列表不一样. Function.call(obj,[param1[,param2[,…[,paramN]]]])obj:这个对象将代替Function类里this对象para…
Javascript中有一个call和apply方法,其作用基本相同,但是它们也有略微不同的地方. JS手册中对call方法的解释是: call方法:调用一个对象的一个方法,以另一个对象替换当前对象. call(thisObj,arg1,arg2……) 参数: thisObj  可选项,将被用作当前对象的对象. arg1,arg2……argN 可选项,将被传递参数列表. call方法可以用来代替另一个对象调用一个方法.call方法可以将一个函数的对象上下文从初始的上下文改变为由thisObj指定…
apply 方法/call 方法 obj.call(thisObj, arg1, arg2, ...);obj.apply(thisObj, [arg1, arg2, ...]); 两者作用一致,都是把obj(即this)绑定到thisObj,这时候thisObj具备了obj的属性和方法.或者说thisObj『继承』了obj的属性和方法.唯一区别是apply接受的是数组参数,call接受的是连续参数. 看代码: function add(j, k){ return j+k; } function…
1.apply 方法 apply:调用一个对象的一个方法,用另一个对象替换当前对象.例如:B.apply(A, arguments);即A对象应用B对象的方法. apply方法最多只能有两个参数——新this对象和一个数组argArray.如果给该方法传递多个参数,则把参数都写进这个数组里面,当然,即使只有一个参数,也要写进数组里.如果argArray不是一个有效的数组或arguments对象,那么将导致一个TypeError.如果没有提供argArray和thisObj任何一个参数,那么Glo…
call 和 apply 的共同点 它们的共同点是,都能够改变函数执行时的上下文,将一个对象的方法交给另一个对象来执行,并且是立即执行的. 为何要改变执行上下文?举一个生活中的小例子:平时没时间做饭的我,周末想给孩子炖个腌笃鲜尝尝.但是没有适合的锅,而我又不想出去买.所以就问邻居借了一个锅来用,这样既达到了目的,又节省了开支,一举两得. 改变执行上下文也是一样的,A 对象有一个方法,而 B 对象因为某种原因,也需要用到同样的方法,那么这时候我们是单独为 B 对象扩展一个方法呢,还是借用一下 A…
作用 可以把方法借给其它对象使用,并且改变this的指向 a.apply(b,[3,2]);//this指向由a变为b, a的方法借给b使用 实例: function add(a,b){                console.log(this)              return a+b;              }            function sub(a,b){              return a-b;              }            //…