学些js call apply bind的新的收获,做个记录,希望大家多多指导

call: 改变当前执行上下文的this指针

function dog(color){
    this.color = color;
}

dog.prototype.eat = function(){
  return   this.color+ " dog can eat food";
}

var blackDog = new dog(‘black‘);

blackDog.eat();// black dog can eat food

var redDog = {
  color: "red"
}

blackDog.eat.call(redDog);//red dog can eat food

总结: 一开始blackDog 对象中的this只向其本身,所以this.color就是实例化对象时传入的black, 然而当执行blackDog.eat.call(redDog)这个方法时,通过call方法改变了this的指向,this 指向redDog, 所以this.color就是red。

apply: 和call方法大致相同,改变当前执行上下文的this指针,但是传入的参数(第一个以外)是一个数组。

function dog(color){
    this.color = color;
}

dog.prototype.showSkills= function(eat, run, jump){
    console.log(this.color + " dog skill: " + eat +"," +  run +","+ jump);
}

var blackDog = new dog(‘black‘);

var redDog = {
  color: "red"
}

blackDog.showSkills.call(redDog, "eat", "run", "jump");//red dog skill: eat,run,jump
blackDog.showSkills.apply(redDog, ["eat", "run", "jump"]);//red dog skill: eat,run,jump

总结: 由此可见,call和apply用法大致相同,但是apply的在调用另一个方法是,传入的多个参数是数据,数组内的多个参数会以原有的顺序对应到每一接受器上。

bind: 功能与call和apply相似 其作用是改变某个方法的this指针,并且在该方法被调用时才会生效,而不像call和apply会理解执行

eg1:
function bindDemo(){
  console.log(this.a)
};

bindDemo.bind({a: "i am this.a"}) //此处并没有被掉用,只是一个声明
bindDemo.bind({a: "i am this.a"})();// i am this.a

eg2:
function cat(){
    this.eat = function(){
        console.log(this.name + " cat is eating");
    }
}

var Cat = new cat();

Cat.eat.call({name: "blackCat"});// blackCat cat is eating
Cat.eat.apply({name: "redCat"});// redCat cat is eating
Cat.eat.bind({name: "otherCat"}); //此处只会返回一个对象,不会有输出,因为还没有真正调用
Cat.eat.bind({name: "otherCat"})();//otherCat cat is eating

总结: bind方法再被使用时,必须进行掉用才会执行,而call 和apply 则会直接掉用原来的方法,并改变this指针。

时间: 2024-11-08 12:09:45

学些js call apply bind的新的收获,做个记录,希望大家多多指导的相关文章

js call apply bind简单的理解

相同点:JS中call与apply方法可以改变某个函数执行的上下文环境,也就是可以改变函数内this的指向.区别:call与apply方法的参数中,第一个参数都是指定的上下文环境或者指定的对象,而call()方法传入的参数都是不定的,而apply()方法传入的参数都是放入数组中才能传入的. bind()方法与call()和apply()方法很相似,都是可以改变函数内this的指向. MDN的解释是:bind()方法会创建一个新函数,称为绑定函数,当调用这个绑定函数时,绑定函数会以创建它时传入bi

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 caller callee bind

call apply bind作用类似.即调用一个对象的一个方法,以另一个对象替换当前对象. call 语法:call([thisObj[,arg1[, arg2[,   [,.argN]]]]]) apply 语法:apply([thisObj[,argArray]]) bind  call()  apply() 都是立马就调用了对应的函数,而 bind() 不会, bind() 会生成一个新的函数,bind() 函数的参数跟 call() 一致,第一个参数也是绑定对象,后面接受传递给函数的不

JS之call/apply/bind

测试代码: var a = 1; var obj = { a = 2; } function test(a){ alert(a); alert(this.a); } 1.test(3); 结果:3,1 函数中this指向window对象 2.test.call(thisObj,param1,param2....); thisObj:test函数中this的指向 param1,param2...:传给test函数的参数 3.test.call(null,3)或者test.call(undefine

JS中call,apply,bind方法的总结

why?call,apply,bind干什么的?为什么要学这个? 一般用来指定this的环境,在没有学之前,通常会有这些问题. var a = { user: "小马扎", fn: function(){ console.log(this.user); } } var b = a.fn; b(); // undefined 我们是想打印对象a里面的user却打印出来undefined是怎么回事呢?如果我们直接执行a.fn()是可以的. var a = { user: "小马扎

前端JS面试题汇总 Part 3 (宿主对象与原生对象/函数调用方式/call与apply/bind/document.write)

原文:https://github.com/yangshun/front-end-interview-handbook/blob/master/questions/javascript-questions.md 最近将持续翻译JavaScript面试题,希望对各位有所帮助. (文章中斜体字部分为译者添加) 目录: Part 1(事件委托/this关键字/原型链/AMD与CommonJS/自执行函数) Part 2 (null与undefined/闭包/foreach与map/匿名函数/代码组织)

js中的call apply bind简单总结

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

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 + "年龄" + t

call, apply, bind 函数能干啥?如何在日常搬砖中使用?(全)

call(),apply(),bind() 函数大家可能都有所了解,但是在平时搬砖过程中很可能或者基本没用过,学过但都淡忘了. 但是在大量第三方的框架(库),甚至js自己都在 源码中大量使用 call,apply 函数.所以今天和大家仔细讨论下它们在 开发中的应用场景 . 1 . 它们是啥意思 1.1 作用 他们的作用都是改变函数内部的this. 这三个函数都是函数对象的方法,也就是说只有函数才可以直接调用这些方法. ps:call,apply,bing属于this显示绑定,还有好几种其他的th