首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Javascript中使用调用和应用的上下文?

在Javascript中使用调用和应用的上下文?
EN

Stack Overflow用户
提问于 2011-12-29 01:49:49
回答 6查看 30.6K关注 0票数 75

有谁能解释一下在Javascript中使用callapply方法的上下文吗?

为什么要使用callapply而不是直接调用函数?

EN

回答 6

Stack Overflow用户

发布于 2011-12-29 01:52:34

当您想要向函数传递不同的this值时,可以使用callapply。本质上,这意味着您想要执行一个函数,就好像它是一个特定对象的方法一样。这两者之间的唯一区别是,call需要以逗号分隔的参数,而apply需要数组中的参数。

来自Mozilla's apply page的一个示例,其中构造函数是链式的:

代码语言:javascript
复制
function Product(name, price) {
    this.name = name;
    this.price = price;

    if (price < 0)
        throw RangeError('Cannot create product "' + name + '" with a negative price');
    return this;
}

function Food(name, price) {
    Product.apply(this, arguments);
    this.category = 'food';
}
Food.prototype = new Product();

function Toy(name, price) {
    Product.apply(this, arguments);
    this.category = 'toy';
}
Toy.prototype = new Product();

var cheese = new Food('feta', 5);
var fun = new Toy('robot', 40);

Product.apply(this, arguments)的作用如下:Product构造函数作为FoodToy构造函数中的一个函数应用,每个对象实例都作为this传递。因此,FoodToy现在都有this.namethis.category属性。

票数 82
EN

Stack Overflow用户

发布于 2011-12-29 01:51:38

只有在使用callapply时,才能修改函数内的this上下文。

与其他语言不同,在JavaScript中,this不引用当前对象,而是引用执行上下文,并且可以由调用者设置。

如果使用new关键字调用函数,this将正确引用新对象(在构造函数内)..

但在所有其他情况下,除非通过调用显式设置,否则- this将引用全局对象

票数 23
EN

Stack Overflow用户

发布于 2011-12-29 02:11:46

当您希望使用不同的this值执行函数时,可以使用.call()。它设置指定的this值,设置指定的参数,然后调用函数。.call()和只执行函数之间的区别在于函数执行时this指针的值。当你正常执行函数时,javascript决定this指针是什么(通常是全局上下文window,除非函数是作为对象上的方法调用的)。当您使用.call()时,您可以精确地指定您希望将this设置为的值。

当要传递给函数的参数在数组中时,可以使用.apply().apply()还可以使用特定的this值来执行函数。当您有不确定数量的来自其他来源的参数时,最常使用.apply()。它通常用于通过使用特殊的局部变量arguments将参数从一个函数调用传递到另一个函数调用,该变量包含一个传递给当前函数的参数数组。

我发现.call().apply()的MDN参考页面很有帮助。

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8659390

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档