javascript代码实例教程-JavaScript中apply和call用法的理解

发布时间:2019-01-13 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了javascript代码实例教程-JavaScript中apply和call用法的理解脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
小宝典致力于为广大程序猿(媛)提供高品质的代码服务,请大家多多光顾小站,小宝典在此谢过。

JavaScript中apply和call用法的理解,首先call()`和`apply()`都是JavaScript 中函数对象上的方法:

```

VAR f = function () {};

'call' in f; // true

'apply' in f; // true

```

说到函数,JavaScript 中有个`this`的概念与函数调用相关,`this`指向一个对象(就是函数的所有者),表示函数调用时的执行上下文;当在函数内引用`this`的时候,就会指向这个对象。

如下例字可以具体说明this:

var man = {

name: 'Jason',

sayName: function() {

console.LOG(this.name);

}

}

man.sayName(); // 输出'Jason'

```

上面的例子中,`sayName()`是对象`man`上的方法,`sayName()`里`this`指向`sayName()`所在的对象(即`man`),`this.name`实际上是`man.name`,因此最后输出'Jason'。

如果函数不是对象上的方法,那`this`默认情况下会指向全局上下文,在浏览器中,也就是`window`:

```

window.name = 'Tommy'

function foo() {

console.log(this.name);

}

foo(); // `this`指向`window`,所以输出'Tommy'

```

明白了`this`之后,`call()`和`apply()`就好解释了。这两个方法的作用是在函数调用时改变函数的执行上下文,也就是函数内的`this`;这两个方法第一个参数,就是希望得到的`this`。

比如上面的`foo`函数,由于定义在全局环境中,`this`默认指向`window`;如果想更改里面指向的`this`,例如改成`man`,可以调用`foo`的`call()`方法,然后把`man`传进来:

```

foo.call(man); // 输出`man`

foo.apply(man); // 也是输出`man`

```

两个方法都可以更改函数执行时绑定的`this`;那它们有什么不同呢?主要是在传参上。

假如`foo`定义时包括了形参

```

window.name = 'Tommy'

function foo(a, b) {

console.log(a + b + this.name);

}

```

也就是说`foo`调用时期望传进两个参数,所以对于`foo.call()`和`foo.apply()`的形式,第一个参数指定绑定的`this`,后面的参数指定`foo`调用时期望传入的参数(有2个);对于`call`来说,两个参数一个一个传进来;而对于`apply`来说,两个参数必须组成一个数组,以数组方式传进来:

```

foo.call(man, 'Hello, ', ';mr.'); // 输出‘Hello, Mr.Jason’

foo.apply(man, ['Hello, ', 'Mr.']); // 同样输出‘Hello, Mr.Jason’

```

比较下直接调用`foo`的结果

```

foo('Hello, ', 'Mr.'); 输出‘Hello, Mr.Tommy’

```

觉得可用,就经常来吧! 脚本宝典 欢迎评论哦! js脚本,巧夺天工,精雕玉琢。小宝典献丑了!

脚本宝典总结

以上是脚本宝典为你收集整理的javascript代码实例教程-JavaScript中apply和call用法的理解全部内容,希望文章能够帮你解决javascript代码实例教程-JavaScript中apply和call用法的理解所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。