资讯专栏INFORMATION COLUMN

详解apply的用处

CoyPan / 3109人阅读

摘要:举几个简单的例子的用途改造一下上面的例子调用一个函数的方法有很多可以用函数表达式调用,也可以直接调用。还有一种方法是用调用接受两个参数,第一个参数是函数运行时指向的第二个参数是一个数组里面存放函数的参数。

先谈this
关于this的指向就不细说了,网上有无数博客以及you don"t kown js这类书讲的已经很详细了这里就不炒冷饭了。
举几个简单的例子
function foo() {
    console.log(this);
}
    
foo() //window

var obj = {
    job: "doctor",
    show: function() {
        console.log(this.job); //job
        console.log(this === obj); //true
    }
}
obj.show();
apply的用途
改造一下上面的例子
var obj = {
    job: "doctor",
}
function foo(str) {
    console.log(this); //obj
    console.log(str);  //hi
}
foo.apply(obj,["hi"]);
调用一个函数的方法有很多可以用函数表达式调用,也可以直接调用。还有一种方法是用apply调用
apply接受两个参数,第一个参数是函数运行时指向的this,第二个参数是一个数组里面存放函数的参数。
也就是我们可以手动更改this的指向,再次看上面的代码我们让函数foo中的this指向了obj,还接受了一个字符串"hi"
那么反过来我们是否可以在foo中对obj的属性进行赋值呢?答案是肯定的
再次更改代码
var obj = {
    job: "doctor",
}
function foo(str) {
    this.books = ["One Hundred Years of Solitude", "Gone with the wind"]
}
foo.apply(obj,["hi"]);
console.log(obj); // {job: "doctor", books: Array(2)}
apply的用处无所不在,比如将nodelist转为数组,类型检测这些网上同样有很多例子
apply与函数式编程
如果我们有声明一个数组并想得到数组中每一个元素的值我们可以这么做
var arr = ["katana", "chunks", "shurken"];
for(var i = 0;i
但是这种声明式的写法是不是有些丑陋?让我们换一种写法
function forEach(list, callback) {
    for(var n = 0; n           
               
                                           
                       
                 

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/93507.html

相关文章

  • Js apply()使用详解

    摘要:方法详解我在一开始看到的函数和时非常的模糊看也看不懂最近在网上看到一些文章对方法和的一些示例总算是看的有点眉目了在这里我做如下笔记希望和大家分享如有什么不对的或者说法不明确的地方希望读者多多提一些意见以便共同提高主要我是要解决一下几个问题和 Js apply方法详解我在一开始看到javascript的函数apply和call时,非常的模糊,看也看不懂,最近在网上看到一些文章对apply...

    iOS122 评论0 收藏0
  • Angular1.x中ngModel$render详解

    摘要:我们下面来看看的源码这是其中一个,在不同的指令下的代码都不太一样,但是其作用基本一致,但是从这里我们就可以看出的到底在干什么事了。 这篇文章是我两年前在博客园写的,现在移植过来,不过Angular 1.x 在国内用的人已经不多了,希望能帮助到有需要的人 在我开始着手 ngModel 的领域时候,有一个问题很令我纠结,那就是 $render 到底是做什么的呢?查了很多资料都只是简单的描述...

    Euphoria 评论0 收藏0
  • 怎样使用this

    摘要:构造器的调用这其实很简单,就是使用创建的是一个对象,而不是一个函数这里的指向的就是上的。但需要注意在构造器内不能显示的返回一个对象否则你的实例化就会被破坏。 this的使用 关于js里面有哪些难点,艹,js里面全是难点。。。什么闭包,原型,函数,对象,类型检测,this。。。但是作为一名正统的前端爱好者而言---这点痛算什么。今天我们来解决this这个点。由于牵扯到this,则必定会牵...

    cppowboy 评论0 收藏0
  • Cordova 打包签名 Android release app 过程详解及cordova创建app

    摘要:很久之前就想写这篇博客,但是一直没有时间,今天抽空来整理一下,总结一下的创建打包签名。 很久之前就想写这篇博客,但是一直没有时间,今天抽空来整理一下,总结一下cordova的创建、打包、签名apk。对于cordova所需的打包环境,如node,cordova的安装,这里就不再多说,度娘上有很多... 1.cordova命令创建一个项目 cordova create testApp co...

    objc94 评论0 收藏0
  • 20190725笔记-apply详解

    摘要:语法参数这个对象将替代类里的对象可选在函数运行时使用的值。如果该参数的值为或,则表示不需要传入任何参数。更简单的讲就是将和传入函数执行。 学了那么久前端,对apply、call这两个函数的用法,还不是很掌握。今天看了很多网上的文章,我总结和归纳下用法。 Function.prototype.apply() apply() 方法调用一个具有给定this值的函数,以及作为一个数组(或类似数...

    wzyplus 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<