Javascript如何使用.call()和.apply()编写更好的代码


小编给大家分享一下Javascript如何使用.call()和.apply()编写更好的代码,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!Javascript函数对象的原型公开了两个有价值的方法,分别是call()和apply()。首先,让我们了解每种方法的作用。call()函数用于通过为其提供的this的上下文来调用函数。它允许我们通过在特定函数内显式提供用于this事件的对象来调用函数。为了更好地了解为什么存在这种方法,请考虑以下示例:如你所见,this函数内部指的是全局作用域。在上面的代码中,sayHello函数试图在全局范围内查找名为name变量。由于不存在这样的变量,它打印出undefined.如果我们定义了一个在全局范围内调用的name变量,该函数将按预期工作,如下所示:这里的缺点是sayHello函数假定this变量的范围,我们无法控制它。根据我们执行它的词法范围,该函数的行为会有所不同。这时候call()方法派上用场了。如你所知,它允许我们显式注入我们需要用于this函数内部变量的对象:考虑下面的例子:除了this作为方法的第一个参数传递的上下文之外,call()还接受被调用函数免费云主机域名的参数。在第一个参数之后,我们传递给call()方法的所有其他参数都将作为参数传递给被调用函数。我们可以编写一个函数并在不同的this上下文中调用它:如你所见,如果使用得当,这会提高代码的可重用性和可维护性。我们可以使用call()方法来链接通过函数创建的对象的构造函数。使用该函数创建对象时,函数可以采用另一个函数作为其构造函数。如下例所示,DogFish都调用Animal函数来初始化它们的公共属性,即namenoOfLegs:这也是代码重用的一种变体。这种模式还使我们能够用其他语言编写接近 OOP 原则的代码。匿名函数继承调用它们的词法作用域。我们可以使用call()方法将this作用域显式注入匿名函数。考虑下面的例子:在这里,我们不必实现一个专门的函数来将makeSound方法附加到每个动物对象上。这使我们无法编写和命名一次性使用的实用程序函数。这些是我们可以有效地使用call()方法使我们的代码干净、可重用和可维护的几种方法。apply()在功能方面几乎与call()方法相同。唯一的区别是它接受一个类似数组的对象作为它的第二个参数。除了apply()如何处理被调用方参数外,该功能与call()方法相同。但是,由于这种差异,我们可以将其用于不同于call()的用例。Array.prototype.push函数可用于将元素推送到数组的末尾。例如:如果你想将一个数组的所有元素推送到另一个数组,该怎么办?像下面这样:这并不是我们想要的。它将整个字母数组作为单个元素附加到数字数组。我们本可以使用concat()方法,但它将创建数组的副本并返回它。我们也不需要。我们还可以在字母数组上循环并单独推送每个元素。但还有一种更优雅的方式:如果我们有特权使用ES6扩展运算符,我们可以通过这样做来实现这一点,对于任何接受参数列表的函数,例如Math.max我们可以有效地使用 apply。考虑以下。如果你想找出一组数字的最小值和最大值,下面是老派的做法:我们可以apply()以更优雅的方式实现相同的效果,如下所示:与前一种情况相同,如果我们可以使用ES6扩展运算符,我们可以通过执行以下操作来实现相同的效果:看完了这篇文章,相信你对“Javascript如何使用.call()和.apply()编写更好的代码”有了一定的了解,如果想了解更多相关知识,欢迎关注百云主机行业资讯频道,感谢各位的阅读!

相关推荐: C#中的EventHandler观察者模式怎么实现

这篇文章主要介绍“C#中的EventHandler观察者模式怎么实现”,在日常操作中,相信很多人在C#中的EventHandler观察者模式怎么实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C#中的EventHandler观…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 08/19 07:58
下一篇 08/19 07:58

相关推荐