浅谈 apply 和 call

要想记得牢,首先要记住它存在的目的。
在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的区别就是传参数的方式不同。


前端_风雨开发路
用心整理web前端开发过程中遇到的坑和绕过的弯,希望能帮助到茫茫人海中的你!

灵魂和皮囊能够握手言和,面子和里子能够始终如一。

272 声望
15 粉丝
0 条评论
推荐阅读
CSRF是什么?有效的防御措施有哪些?
很多厂在面试的时候,都喜欢问一下关于web安全的问题,比如接下来要说的这个,什么是CSRF以及防范措施有哪些?这文章会带你搞懂CSRF。什么是CSRF?(Cross Site Request Forgery, 跨站域请求伪造)是一种网络的攻...

huangsh2阅读 5.7k

正则表达式实例
收集在业务中经常使用的正则表达式实例,方便以后进行查找,减少工作量。常用正则表达式实例1. 校验基本日期格式 {代码...} {代码...} 2. 校验密码强度密码的强度必须是包含大小写字母和数字的组合,不能使用特殊...

寒青56阅读 8.4k评论 11

JavaScript有用的代码片段和trick
平时工作过程中可以用到的实用代码集棉。判断对象否为空 {代码...} 浮点数取整 {代码...} 注意:前三种方法只适用于32个位整数,对于负数的处理上和Math.floor是不同的。 {代码...} 生成6位数字验证码 {代码...} ...

jenemy48阅读 6.9k评论 12

从零搭建 Node.js 企业级 Web 服务器(十五):总结与展望
总结截止到本章 “从零搭建 Node.js 企业级 Web 服务器” 主题共计 16 章内容就更新完毕了,回顾第零章曾写道:搭建一个 Node.js 企业级 Web 服务器并非难事,只是必须做好几个关键事项这几件必须做好的关键事项就...

乌柏木75阅读 7k评论 16

再也不学AJAX了!(二)使用AJAX ① XMLHttpRequest
「再也不学 AJAX 了」是一个以 AJAX 为主题的系列文章,希望读者通过阅读本系列文章,能够对 AJAX 技术有更加深入的认识和理解,从此能够再也不用专门学习 AJAX。本篇文章为该系列的第二篇,最近更新于 2023 年 1...

libinfs42阅读 6.8k评论 12

封面图
从零搭建 Node.js 企业级 Web 服务器(一):接口与分层
分层规范从本章起,正式进入企业级 Web 服务器核心内容。通常,一块完整的业务逻辑是由视图层、控制层、服务层、模型层共同定义与实现的,如下图:从上至下,抽象层次逐渐加深。从下至上,业务细节逐渐清晰。视图...

乌柏木45阅读 8.5k评论 6

从零搭建 Node.js 企业级 Web 服务器(二):校验
校验就是对输入条件的约束,避免无效的输入引起异常。Web 系统的用户输入主要为编辑与提交各类表单,一方面校验要做在编辑表单字段与提交的时候,另一方面接收表单的接口也要做足校验行为,通过前后端共同控制输...

乌柏木35阅读 6.6k评论 10

灵魂和皮囊能够握手言和,面子和里子能够始终如一。

272 声望
15 粉丝
宣传栏