博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JS的this总结(上)-call()和apply()
阅读量:4658 次
发布时间:2019-06-09

本文共 2209 字,大约阅读时间需要 7 分钟。

JS的this总结(上)-call()和apply()

​ 相信很多人在学习JavaScript的过程中,都会了解到this,而大部分人都会特意去网络上搜一下相关资料,大部分的文章都有这么一句话:

this总是指向调用该函数的对象。

​ 确实,这句话在我学习JS的过程中,基本没出现过什么错误.

​ 但是注意的是JS中,平时用得相对比较少的2个方法,可以改变this的指向:

call(thisArg[, arg1[, arg2[, ...]]])

首先call(),引用segmentfault中的一个问题:[]

function Animal(name) {            this.name = name;            this.showName = function () {                alert(this.name);            }        }        function Cat(name) {            Animal.call(this, name);            // 执行Animal方法,并传入name作为参数        }        var cat = new Cat("Black Cat");        cat.showName();//Black Cat

​ 大概过程如下,我们在new一个实例的时候,this的指向改变了,指向了Cat实例对象(同时我们也尝试可以不用new,我们会发现this指向Window(严格模式下指向的是undefined)),然后Animal.call(this, name) 中的this,指向的也是Cat实例对象本身,这个时候就相当于

cat.name = name;        cat.showName = function () {            alert(cat.name);        }

​ 结果相当于,我们用call()让Cat的实例对象cat,传入name('Black Cat')参数,并且临时执行了Animal中的方法

​ 从网上搜来的call()的资料如下,可以参考一下,推荐看MDN文档关于call()介绍--

call方法:

语法:call(thisObj,Object)

定义:调用一个对象的一个方法,以另一个对象替换当前对象。

说明:

call 方法可以用来代替另一个对象调用一个方法。call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。

如果没有提供 thisObj 参数,那么 Global 对象被用作 thisObj。

apply(thisArg, [argsArray])

简单来说call()和apply()两者的作用一样,都是改变作用域,两者唯一的区别就是第二个参数

应用MDN文档上的一句话:

cal()方法的作用和apply()方法类似,只有一个区别,就是call()方法接受的是若干个参数的列表,而apply()方法接受的是一个包含多个参数的数组

总的来说就是:call()接受的是参数列表,apply接受的是包含参数的数组,

两者区别例子:

function Animal(name) {            this.name = name;            this.showName = function () {                console.log(this.name);            };        }        function Cat(name) {            Animal.call(this, name);        }        Cat.prototype = new Animal();        function Dog(name) {            Animal.apply(this, name);        }        Dog.prototype = new Animal();        var cat = new Cat("Black Cat"); //call必须是object        var dog = new Dog(["Black Dog"]); //apply必须是array        cat.showName();//"Black Cat"        dog.showName();//"Black Dog"

两个方法的运行方式基本相同,唯一不同的就是参数,运行方式可以参照上文

同样的,网上搜来的apply()的资料如下:

apply方法:

语法:apply(thisObj,[argArray])

定义:应用某一对象的一个方法,用另一个对象替换当前对象。

说明:

如果 argArray 不是一个有效的数组或者不是 arguments 对象,那么将导致一个 TypeError。

如果没有提供 argArray 和 thisObj 任何一个参数,那么 Global 对象将被用作 thisObj, 并且无法被传递任何参数。

转载于:https://www.cnblogs.com/Kim1am/p/7520317.html

你可能感兴趣的文章
java创建线程的三种方式及其对照
查看>>
unity常见问题之20题
查看>>
AI类第四周进度
查看>>
SQLServer学习笔记系列7
查看>>
【bzoj1712】[Usaco2007 China]Summing Sums 加密 矩阵乘法
查看>>
如何解决git创建密匙时报错Too many arguments
查看>>
python学习笔记-25 实例属性和类属性
查看>>
python 单例模式
查看>>
Java知识积累——String引用的判断问题
查看>>
Asp.Net Web API 2第七课——Web API异常处理
查看>>
bzoj 2339: [HNOI2011]卡农
查看>>
15-浮动
查看>>
Linux下MySQL表名不区分大小写的设置方法
查看>>
求几天后是几月几号1022
查看>>
vc++网络安全编程范例(20)木马防范检测数据端口与进程
查看>>
Tango with Django 1.9 中文——1.概述
查看>>
年度榜单:2012年最流行的28款免费英文字体素材
查看>>
数据类型范围
查看>>
codeforce 8A-8C
查看>>
湖南省第六届大学生程序设计大赛原题 F Biggest Number (UVA1182)
查看>>