call 和 apply 和 bind的区别

有些东西说忘就往,每天记录自己忘记的东西重新学习一遍,挺好

作用:call()和apply()用法都是一样的,改变this的指向问题

区别:接收参数的方式不同,

(bind 方法是附加在函数调用后面使用,可以忽略函数本身的 this 指向),

(bind和 call / apply 有一些不一样,就是不会立即执行函数,而是返回一个已经改变了 this 指向的函数)

1.call

call 方法是附加在函数调用后面使用,可以忽略函数本身的 this 指向

语法: 函数名.call(要改变的 this 指向,要给函数传递的参数1,要给函数传递的参数2, ...)

  (第一个参数是你要改变的函数内部的 this 指向)

  (第二个参数开始,依次是向函数传递参数)

//实例1
var a = 1
function fn1(){
    console.log(this)
}
fn1()  // window
fn1().call(1)  //1

//实例2
var obj = {
    a:"很好",
    fn2:function(res){
        console.log(res+this.a)
    }
}
obj.fn2("我")//我很好
var co = {
    a:‘很不好‘
}
obj.fn2.call(co,"我")//我很不好

2.apply

apply 方法是附加在函数调用后面使用,可以忽略函数本身的 this 指向

语法: 函数名.apply(要改变的 this 指向,[要给函数传递的参数1, 要给函数传递的参数2, ...])

var obj = {
    name : ‘王富贵‘
}
function fn1(a,b) {
    console.log(this) //{name: "王富贵"}
    console.log(a+b) //3
}
fn1.apply(obj,[1,2])

3.bind

bind 方法是附加在函数调用后面使用,可以忽略函数本身的 this 指向

和 call / apply 有一些不一样,就是不会立即执行函数,而是返回一个已经改变了 this 指向的函数

语法: var newFn = 函数名.bind(要改变的 this 指向); newFn(传递参数)

var obj = {
    name : ‘王富贵‘
}
function fn1(a,b) {
    console.log(this) //{name: "王富贵"}
    console.log(a+b) //5
}
var fn2 = fn1.bind(obj)//这里只能传一个参数  改变this的指向
fn2(2,3)

原文地址:https://www.cnblogs.com/dcyd/p/12430088.html

时间: 2024-11-04 13:18:07

call 和 apply 和 bind的区别的相关文章

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() {

call和apply和bind的区别

在 javascript 中,call 和 apply 都是为了改变某个函数运行时的上下文(context)而存在的,换句话说,就是为了改变函数体内部 this 的指向. JavaScript 的一大特点是,函数存在「定义时上下文」和「运行时上下文」以及「上下文是可以改变的」. apply(): 将函数作为指定对象的方法来调用,传递给它的是指定的参数数组function.apply(thisobj, args) 或者 function.apply(thisobj, args) 1.thisobj

改变this指针的apply,call,bind的区别

apply.call 在 javascript 中,call 和 apply 都是为了改变某个函数运行时的上下文(context)而存在的,换句话说,就是为了改变函数体内部 this 的指向. JavaScript 的一大特点是,函数存在「定义时上下文」和「运行时上下文」以及「上下文是可以改变的」这样的概念. 先来一个栗子: 1 2 3 4 5 6 7 8 9 10 11 function fruits() {}   fruits.prototype = {     color: "red&qu

apply,call,bind的区别

apply和call 在js中,apply,call,bind都是为了改变函数的执行上下文的而存在的,即改变函数内部this的指向. 下面的例子可以说明我们为什么要用apply和call,以及apply和call的区别. function Person(){}; Person.prototype = { name:'John', sayName:function(type){ console.log(this.name + " "+ type); } } var testPerson

超容易理解的call()、apply()、bind()的区别

call().apply().bind()是用来改变this的指向的. 一 举个例子 一个叫喵喵的猫喜欢吃鱼,一个叫汪汪的小狗喜欢啃骨头,用代码实现如下: var cat = { name:"喵喵", eatFish:function(param1,param2){ console.log("吃鱼"); console.log("this的指向=>"); console.log(this); console.log(param1,param

js学习总结----call和apply和bind的区别

apply和call的方法是一模一样的,都是用来改变方法的this关键字,并且把方法执行:而且在严格模式和非严格模式下对于第一个参数是null/undefined这种情况的规律是一样的: bind:这个方法在IE6-8下不兼容 ->和call和apply类似都是用来改变this关键字的 'use strict' //告诉当前浏览器接下来的js代码将按照严格模式进行编写 var obj = {name:'张三'} function fn(num1,num2){ console.log(num1+n

js中call、apply、bind的区别

var Person = { name : 'alice', say : function(txt1,txt2) { console.info(txt1+txt2); console.info(this.name); }} var Dog = { name : 'tom', say : function(txt1,txt2) { console.info(txt1+txt2); console.info(this.name); }}var arr = ['hello','hi'];Person.

call和apply,bind的区别专讲

可以干什么? 改变函数内的this指向: 什么时候使用? 构造函数使用this 为什么使用? 为了生成对象 类(函数名不可以带括号).call()      因为this指向对象,所以call的第一个参数为对象 function fn(a,b){   (形参) this.name="zhang"; this.age=20 } obj={ name:"li"; age:10 } fn.call(obj,a,b) fn.apply(obj,[a,b]) (实参)   

转 - JS 中 call 和 apply 以及 bind 的区别

转自 https://blog.csdn.net/wyyandyou_6/article/details/81488103 原文地址:https://www.cnblogs.com/dmc-nero/p/12039009.html