资讯专栏INFORMATION COLUMN

浅谈 apply 和 call

arashicage / 2856人阅读

摘要:要想记得牢,首先要记住它存在的目的。或可以看出和是为了动态改变而出现的,如果一个没有某个方法,而别的有,那么就用得上和了。那和有什么区别呢请看下边这个例子很容易就可以看出和的区别就是传参数的方式不同。

要想记得牢,首先要记住它存在的目的。
在javascript OPP中,我们经常这样定义:

function person(){}
person.prototype = {
    name: "jack",
    say: function(){
        console.log("my name is" + this.name)
    }
}
var goodPerson = new person()
goodPerson.say() // 打印 my name is jack

现在有一个对象dog = {name:"wangwang"},这条狗也想会说话(拥有say方法),那么我们可以这样goodPerson.say.call(dog) 这样dog就可以说话了。

var dog = {
    name:"wangwang"
}
goodPerson.say.apply(dog) // my name is wangwang
或
goodPerson.say.call(dog) // my name is wangwang

可以看出call和apply是为了动态改变this而出现的,如果一个object没有某个方法,而别的object有,那么就用得上call和apply了。
那call 和 apply有什么区别呢?
请看下边这个例子:

function add (a = 1, b = 1) {
    return a + b
}
function sub (a = 1, b = 1) {
    return a - b
}
add() // 2
sub() // 0
add.call(sub, 2, 2) // 4
add.apply(sub,[2,2]) // 4
sub.call(add, 3, 2) // 1
sub.apply(add, [3, 2]) // 1

so,很容易就可以看出call和apply的区别就是传参数的方式不同。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/93071.html

相关文章

  • 浅谈call()、apply()、bind()方法

    摘要:函数调用方法一般我们是这样调用函数的和现在我们说一说方法和方法。他们都是调用一个对象的方法,以另一个对象替换当前对象。例如方法在上面的例子中,,意思就是用来替换。和方法比较类似,其作用都是改变上下文的。 call(), apply(), bind() 函数调用方法 一般我们是这样调用函数的: function add(x){ console.log(x) } add(2)//2...

    zhangrxiang 评论0 收藏0
  • 浅谈javascript里面的this、callapply、bind

    摘要:如果该参数的值为或,则表示不需要传入任何参数,从开始可以使用类数组对象。当使用操作符调用绑定函数时,该参数无效。当绑定函数被调用时,这些参数将置于实参之前传递给被绑定的方法。 在了解call,apply之前需要先了解下javascrit中this指向 this的指向在ES5里面,this永远指向最后调用它的那个对象举个栗子: var name = outerName; function...

    Lemon_95 评论0 收藏0
  • 浅谈-this

    摘要:回调函数中调用在回调函数中一般有两种情况回调函数为匿名函数时,回调函数的会指向,需要对回调函数。回调函数为箭头函数时,回调函数的会指向他的直接上层。 浅谈-this this简单而又神秘,使用场景多变而又复杂,这造就了它成为了初级javascript开发人员不愿接触的东西,高级javascript都想探究的东西。文本亦是对this的致敬。 this是什么? this是当前执行环境...

    archieyang 评论0 收藏0
  • 浅谈细说 JS 函数(call,apply,重载)

    摘要:什么是函数引用的原话函数是一组可以随时随地运行的语句。函数是由这样的方式进行声明的关键字函数名一组参数,以及置于括号中的待执行代码。 什么是函数? 引用 W3School 的原话: 函数是一组可以随时随地运行的语句。 函数是 ECMAScript 的核心。 函数是由这样的方式进行声明的:关键字 function、函数名、一组参数,以及置于括号中的待执行代码。 函数的基本语法是这样的:...

    U2FsdGVkX1x 评论0 收藏0
  • 浅谈原型式继承、借助构造函数、组合方式继承

    摘要:想要解决这样的问题的话,可以借助构造函数也可以叫做伪造对象或经典继承。这种方式实现非常简单,就是在子对象的构造函数中调用父对象的构造函数。 原型式继承 原型式继承,就是一定一个函数,该函数中创建一个临时性的构造函数,将作为参数,传入的对象作为这个构造函数的原型,最后返回这个构造函数的实例对象 /*定义函数:用于实现对象之间的继承 参数: obj:表示继承关系中的父级对象...

    wangjuntytl 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<