JS中的call()方法和apply()方法用法总结

作者: jiukeshuju 分类: JAVASCRIPT 发布时间: 2021-02-13 21:38
内容纲要
  1. 每个函数都包含两个非继承而来的方法:call()方法和apply()方法。
  2. 相同点:这两个方法的作用是一样的。
    都是在特定的作用域中调用函数,等于设置函数体内this对象的值,以扩充函数赖以运行的作用域。

一般来说,this总是指向调用某个方法的对象,但是使用call()和apply()方法时,就会改变this的指向。

call()方法使用示例:“`javascript

//例2
var Pet = {
    words : '...',
    speak : function (say) {
        console.log(say + ''+ this.words)
    }
}
Pet.speak('Speak'); // 结果:Speak...

var Dog = {
    words:'Wang'
}

//将this的指向改变成了Dog
Pet.speak.call(Dog, 'Speak'); //结果: SpeakWang

apply()方法使用示例:

```javascript


    //例2
    function Pet(words){
        this.words = words;
        this.speak = function () {
            console.log( this.words)
        }
    }
    function Dog(words){
        //Pet.call(this, words); //结果: Wang
       Pet.apply(this, arguments); //结果: Wang
    }
    var dog = new Dog('Wang');
    dog.speak();
  1. 不同点:接收参数的方式不同。
    apply()方法 接收两个参数,一个是函数运行的作用域(this),另一个是参数数组。
    语法:apply([thisObj [,argArray] ]);,调用一个对象的一个方法,2另一个对象替换当前对象。

说明:如果argArray不是一个有效数组或不是arguments对象,那么将导致一个
TypeError,如果没有提供argArray和thisObj任何一个参数,那么Global对象将用作thisObj。

call()方法 第一个参数和apply()方法的一样,但是传递给函数的参数必须列举出来。
语法:call([thisObject[,arg1 [,arg2 [,…,argn]]]]);,应用某一对象的一个方法,用另一个对象替换当前对象。

说明: call方法可以用来代替另一个对象调用一个方法,call方法可以将一个函数的对象上下文从初始的上下文改变为thisObj指定的新对象,如果没有提供thisObj参数,那么Global对象被用于thisObj。

使用示例


    function add(c,d){
        return this.a + this.b + c + d;
    }

    var s = {a:1, b:2};
    console.log(add.call(s,3,4)); // 1+2+3+4 = 10
    console.log(add.apply(s,[5,6])); // 1+2+5+6 = 14 

如果觉得我的文章对您有用,请随意赞赏。您的支持将鼓励我继续创作!

发表评论

标签云
dede dedecms dede标签 echo empty field index li mysql php stus thinkphp 再温 授权 本类 标签 每日更新|织梦插件|Tag标签|充值 程序员 织梦dede:flink友情链接标签自定义输出bug修复 织梦Fatal error: Call to a member function fetchArray解决方法 织梦Fatal error: Call to undefined function dede_htmlspecialchars 织梦TAG标签列表页和搜索结果页调用自定义字段内容 织梦上传图片提示缺少图像源文件地址 织梦上传文件大小限制修改 织梦内容页分页标题提取 织梦判断缩略图是否为空输出不同样式 织梦前台搜索标题和文档内容关键词实现教程 织梦前台模板里显示当前登录会员名 织梦取消mysql错误日志生成文件功能防止暴露后台和管理员 织梦后台自定义表单添加搜索功能 织梦图集302与FILEID:X处理方法 织梦图集上传图片自动获取图片名称做注释 织梦实现url不变电脑和手机显示不同模板 织梦开启绝对路径缩略图https绝对路径时缩略图地址前面多了个域名 织梦手机站去除文章内容中图片的宽高达到自适应+绝对路径图片 织梦手机站搜索结果显示为电脑站的搜索结果模板的解决方法 织梦批量修改栏目的保存目录和文章命名规则 织梦搜索结果为空时输出自定义提示信息 织梦搜索结果增加dede:type、dede:arclist、dede:channelartlist、dede:tag、dede:php等标签支持 织梦搜索结果页分页条样式修改 织梦数据库内容替换,正则去掉文章内容中的img标签 织梦文档内容页title按文章名_当前栏目名_上级栏目名_顶级栏目名_网站名输出 织梦无法上传ico图标格式文件的解决方法 织梦标签array runphp静态生成乱码BUG解决方法 织梦栏目添加 [英文名称] [栏目大图] [栏目小图] 功能