JS中的call(),apply(),bind()方法

call,apply和bind到底有何用?

改变函数的this对象的指向

相似之处

1.都是用来改变函数的this对象指向

2.第一个参数都是this要指向的对象

3.都可以利用后续参数传参

先看下面例子:

例1;

var name = "小王", age = 17;
var obj = {
      name:"小张",
      objAge:this.age,
      myFun:function(){
            console.log(this.name + "年龄" + this.age)
      }
}
obj.objAge;   //17
obj.myFun();  //小张年龄undefined  

例2

var fav = "盲僧";
function shows(){
   console.log(this.fav)
}
shows();  //"盲僧"

比较一下这两者 this 的差别,第一个打印里面的 this 指向 obj,第二个全局声明的 shows() 函数 this 是 window ;  

1.call,apply,bind都是用来重定义this这个对象的!

var name = "小王",age = 17;
var obj = {
     name:"小张",
     objAge:this.age,
     myFun:function(){
         console.log(this.name + "年龄" + this.age)
     }
}
var db = {
    name:"德玛",
    age:99
}  

obj.myFun.call(db);    //德玛年龄 99
obj.myFun.apply(db);   //德玛年龄 99
obj.myFun.bidn(db)();   //德玛年龄 99 

以上就是call,apply和bind的区别,call和apply都是对函数的直接调用,而bind方法返回的仍然是一个函数,因此后面还需要()调用

那么call和apply的区别呢?

把上面例子稍微修改一下

var name = "小王",age = 17;
var obj = {
     name:"小张",
     objAge:this.age,
     myFun:function(fm,t){
         console.log(this.name + "年龄" + this.age,"来自" + fm + "去往" + t)
     }
}
var db = {
    name:"德玛",
    age:99
}  

obj.myFun.call(db,"成都","上海");    //德玛年龄 99,来自成都,去往上海
obj.myFun.apply(db,["成都","上海"]);   //德玛年龄 99,来自成都,去往上海
obj.myFun.bidn(db,"成都","上海")();   //德玛年龄 99 ,来自成都,去往上海
obj.myFun.bind(db,["成都","上海"])();   //德玛年龄 99,来自成都,去往上海
obj.myFun.bind(db)("成都","上海"); //德玛年龄 99,来自成都,去往上海

微妙的差距!

从上面结果不难看出:call,bind,apply这三个函数的第一个参数都是this的指向对象,第二个参数差别就来了,

call的参数是直接放进去的,第二个第三个第n个参数全部都用都好分隔,直接放到后面 obj.myFun.call(db,‘成都‘, ... ,‘string‘ )。

apply的所有参数都必须放在一个数组里面传进去,obj.myFun.apply(db,[‘成都‘, ..., ‘string‘ ])。

当然,第三个参数不限定string类型,允许各种类型,包括函数,object 等等!

由于bind返回的仍然是一个函数,所以我们还可以在调用的时候再进行传参。  

原文地址:https://www.cnblogs.com/woshidouzia/p/11799373.html

时间: 2024-08-09 08:49:37

JS中的call(),apply(),bind()方法的相关文章

js中的call,apply,bind区别

在JavaScript中,call.apply和bind是Function对象自带的三个方法,这三个方法的主要作用是改变函数中的this指向. call.apply.bind方法的共同点和区别:apply . call .bind 三者都是用来改变函数的this对象的指向的:apply . call .bind 三者第一个参数都是this要指向的对象,也就是想指定的上下文(函数的每次调用都会拥有一个特殊值--本次调用的上下文(context)--这就是this关键字的值.):apply . ca

javascript中的call(),apply(),bind()方法的区别

之前一直迷惑,记不住call(),apply(),bind()的区别.不知道如何使用,一直处于懵懂的状态.直到有一天面试被问到了这三个方法的区别,所以觉得很有必要总结一下. 如果有不全面的地方,后续再进行补充. 1. 改变this的指向 var obj = { name : '张三', age : 17, myFun : function () { console.log(this.name + ' ' + this.age); } } var obj2 = { name : '李四', age

js中的call apply bind简单总结

首先来看一个问题: 那如果此时就想要获取button按钮这个对象怎么解决? 结果: 还可以这样解决? 所以简单来说: call apply bind 的作用就是 改变函数内部this的指向.但是各自有点小区别. 再看: 如果不需要改变this的指向,就传入一个null就行. 应用: 原文地址:http://blog.51cto.com/11871779/2133119

JS中的call/apply/bind

<script> var obj = { a:1 } var a = 2; function test(a) { alert(a); alert(this.a); } </script> 1.test(3); 结果:"3"."2"; 解释:实参3传递给形参a,函数内部的形参a覆盖全局变量a,所以第一个为3,函数中this为window对象,所以this.a为2 2.test.call(thisObject,param1,param2...);

js 的 call apply bind 方法

js的call apply bind 方法都很常见,目的都是为了改变某个方法的执行环境(context) call call([thisObj[,arg1[, arg2[,   [,.argN]]]]]) thisObj可选项.将被用作当前对象的对象.arg1, arg2, argN ..可选项.将被传递方法参数序列. 如果没设置严格模式 “use strict” 当thisObj 不存在或 为 undefined 或为 null 或为 this 时,则隐式地指向 全局对象(在浏览器中即为 wi

js中call、apply和bind的区别

前言 关于js中call.apply和bind这三者的区别,这应该是一个老生常谈的问题,也是前端面试时经常会遇到的一道题目,因此也抽空把它理一遍. 作用 call.apply和bind都是一个javascript中的方法,他们的共同作用就是改变函数执行时的上下文,即改变函数执行时this的指向.我们来看下面的例子: 1 function Animal(name) { 2 this.name = name; 3 } 4 Animal.prototype.getName = function() {

js中call,apply,bind的实现原理()

/* author:yangJian */ // js中call,apply,bind的实现原理() // 三者的区别,都是改变this指针,call和apply主要是参数区别,bind返回的是一个函数体,而call和apply是立即执行 // call的实现 function fn1 (str1,str2,str3){ console.log(this,str1,str2,str3); } function fn2(){ } Function.prototype.call = function

js中 call 和 apply

call方法: 语法:call([thisObj[,arg1[, arg2[,   [,.argN]]]]]) 定义:调用一个对象的一个方法,以另一个对象替换当前对象. 说明: call 方法可以用来代替另一个对象调用一个方法.call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象. 如果没有提供 thisObj 参数,那么 Global 对象被用作 thisObj. apply方法: 语法:apply([thisObj[,argArray]]) 定义:应用某

深入浅出:了解JavaScript中的call,apply,bind的差别

在 javascript之 this 关键字详解文章中,谈及了如下内容,做一个简单的回顾: 1.this对象的涵义就是指向当前对象中的属性和方法. 2.this指向的可变性.当在全局作用域时,this指向全局:当在某个对象中使用this时,this指向该对象:当把某个对象的方法赋值给      另外一个对象时,this会指向后一个对象. 3.this的使用场合有:在全局环境中使用:在构造函数中使用,在对象的方法中使用. 4.this的使用注意点,最重要的一点就是要避免多层嵌套使用this对象.