Function.apply()函数详解

本文通过实例详细解析了JavaScript中this关键字的指向规则及如何使用apply方法来改变函数内部this的指向,并传递参数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

name = "张三";
age = 18;

function test(){
    document.writeln(this);
    document.writeln(this.name);
    document.writeln(this.age);     
};

// 全局函数内部的this默认为全局对象window
test(); // [object Window] 张三 18


var obj = {name: "李四", age: 20};
// 更改内部的this指针引用对象为obj
test.apply(obj); // [object Object] 李四 20


function foo(a, b){
    document.writeln(this.name);    
    document.writeln(a);    
    document.writeln(b);    
}
// 改变this引用为obj,同时传递两个参数
foo.apply(obj, [12, true]); // 李四 12 true


function bar(){
    var o = {name: "王五"};
    // 调用foo()函数,并改变其this为对象o,传入当前函数的参数对象arguments作为其参数
    foo.apply(o, arguments);    
}
bar("CodePlayer", "www.365mini.com"); // 王五 CodePlayer www.365mini.com
### Function.prototype.apply 方法详解 `Function.prototype.apply()` 是 JavaScript 中用于调用函数的方法之一。此方法允许指定 `this` 的值以及作为数组传递给被调用函数的参数列表。 #### 基本语法 ```javascript fun.apply(thisArg, [argsArray]) ``` - `thisArg`: 执行上下文中使用的对象。如果该值不是对象,则会尝试将其转换为对象。 - `argsArray`: 可选参数,是一个数组或其他类数组对象,其中包含要传入目标函数的参数[^1]。 #### 实际应用案例 ##### 示例一:改变 this 绑定的对象 当希望在一个特定环境中执行某个函数时可以使用 `apply` 来实现: ```javascript const objA = { value: 10, }; function getValue(multiplier) { return this.value * multiplier; } console.log(getValue.apply(objA, [2])); // 输出 20 ``` 在这个例子中,虽然 `getValue` 函数是在全局作用域定义的,但是通过 `.apply(objA)` 调用它并指定了 `objA` 作为其内部 `this` 关键字所指向的对象;因此,在计算过程中访问到了 `objA` 上面存储的数据成员 `value` 并返回了预期的结果。 ##### 示例二:借用内置方法处理数据结构 有时可能需要利用其他类型的原型链上的功能来简化操作流程。比如我们有一个字符串形式表示的一组数值,并想要快速求得这些数的最大最小值: ```javascript let numbersString = "5, 18, 7, 9"; let numArr = numbersString.split(", ").map(Number); // 使用 Math.max 和 apply 将数组展开成独立参数 let maxNum = Math.max.apply(null, numArr); console.log(maxNum); // 输出最大值 18 ``` 这里借助于 `Math.max` 这个静态方法配合 `apply` 把原本属于数组中的多个元素一次性全部当作单个实参提交给了前者完成比较运算过程。 #### 性能考量与最佳实践建议 尽管 `apply` 提供了一种灵活的方式来调整函数的行为模式,但在高频率场景下应当谨慎考虑性能影响因素。对于简单的迭代任务来说,传统的循环语句可能是更优的选择[^2]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值