call和apply区别

news/2024/7/19 14:25:47 标签: js

对于call和apply的解释,网上有很多,但是为了更好地理解。所以这里自己总结积累下~

JavaScript中的每一个function对象都会有call和apply方法

/*apply()方法*/
function.apply(thisObj[, argArray])

/*call()方法*/
function.call(thisObj[, arg1[, arg2[, [,...argN]]]]);

定义:

apply:调用一个对象的一个方法,用另一个对象替换当前对象。例如:B.apply(A, arguments);即A对象应用B对象的方法。

call:调用一个对象的一个方法,用另一个对象替换当前对象。例如:B.call(A, args1,args2);即A对象调用B对象的方法

从定义中可以看出,call和apply都是调用一个对象的一个方法,用另一个对象替换当前对象。而不同之处在于传递的参数,apply最多只能有两个参数——新this对象和一个数组argArray,如果arg不是数组则会报错TypeError;

call则可以传递多个参数,第一个参数和apply一样,是用来替换的对象,后边是参数列表。

基本用法:

function Dog(){
        this.name = "dog";
        this.showName=function(){
            console.log("这是一条"+this.name+"!")
        }
    }
    function Cat(){
        this.name="cat";
        // Dog.apply(this)
        this.showName=function(){
            console.log(this.name+" eat fish");
        }
        Dog.apply(this)
    };
    var cat = new Cat()
    // Dog.call(cat)    /*call的用法*/
    cat.showName()        /*这是一条dog*/
    console.log(cat.name)    /*dog*/

但是如果你apply写的位置不同,结果也将有所变化。如上述代码

如果我将后边的apply注释掉,将上一个apply打开,那么执行showName()得到的结果将是:dog eat fish


http://www.niftyadmin.cn/n/1202982.html

相关文章

POJ-1456-Supermarket

链接:https://vjudge.net/problem/POJ-1456#authorshleodai 题意: 超市里有N个商品. 第i个商品必须在保质期(第di天)之前卖掉, 若卖掉可让超市获得pi的利润. 每天只能卖一个商品.现在你要让超市获得最大的利润. (原题说明过于抽象) 思路: 贪心…

ajax实现过程

XMLHttpRequest对象的属性和方法 首先XMLHttpRequest 对象用于在后台与服务器交换数据。 1.readyState属性 状态:0 代表未初始化。 1 代表准备发送。 2 已发送但还没收到响应 3 正在接收 4 接收完成 2.responseText属性 包含客户端接收到的HTTP响应的文本内容。 当…

vue 服务器端渲染 nuxt.js初探

开头还是来一段废话: 年关将近,给大家拜个早年,愿大家年会都能抽大奖,来年行大运。 废话不多说,直接进正文 项目环境: 前端vue项目, 需要将新增的几个路由页面做seo处理。在调研 插件 prerender…

什么是闭包?以及闭包的优点,缺点,用处,及特性

定义:闭包 当一个函数的返回值是另外一个函数,而返回的那个函数如果调用了其父函数内部的变量,且返回的这个函数在外部被执行 就产生了闭包.闭包是一个环境,具体指的就是外部函数–高阶函数。 说白了就是一个环境,能够读取其他函数内部的变量。本质上&am…

一枚戒指,一场仪式,这件事阿里巴巴坚持了15年

为入职满五年的员工举行盛大仪式,为他们每个人戴上私人订制的戒指,是阿里巴巴坚持了15年“五年陈”的传统。1月22日,阿里集团为最新一季的“五年陈”们举行了授戒仪式。 2018五年陈小档案 2018年,有1867位同学新晋加入五年陈的队伍…

js冒泡排序和快速排序实现原理和方法

面试经常遇到这个问题,所以整理下,以便理解。 经常用到的排序方法有两种,冒泡排序和快速排序。 1.先说快速排序 原理:每一次比较相邻两个数的大小,通过第一轮循环排序,找到最大值放到后面,第…

Pytorch 初识

文章目录 一个简单的回归网络的例子再来一个例子官方教程上图片识别的例子import torch import torch.nn as nn import torch.nn.functional as F import matplotlib.pyplot as plt #这个一直想学,还没学,代码从莫烦python那copy的 import torchvision i…

为什么要初始化css样式

为什么要初始化css样式 1.浏览器差异 不同浏览器对有些标签的默认值是不同的,如果没对css初始化会出现浏览器之间的页面显示差异 2.提高编码质量 如果不初始化,整个页面做完会很糟糕,重复的css样式很多 最简单的初始化方法是&#xff1a…