当前位置:首页 > JavaScript

call 实现 js

2026-01-31 15:56:52JavaScript

使用 call 方法实现函数调用

call 是 JavaScript 中函数对象的一个方法,用于显式指定函数执行时的 this 值,并传递参数。其语法如下:

function.call(thisArg, arg1, arg2, ...)

thisArg 是函数运行时绑定的 this 值,arg1, arg2, ... 是传递给函数的参数列表。

基本用法示例

function greet(name) {
  console.log(`Hello, ${name}! My name is ${this.name}.`);
}

const person = {
  name: 'Alice'
};

greet.call(person, 'Bob'); // 输出: Hello, Bob! My name is Alice.

修改 this 绑定

call 的主要用途是动态改变函数内部的 this 指向。以下是一个对象方法借用示例:

const obj1 = {
  value: 10,
  getValue: function() {
    return this.value;
  }
};

const obj2 = {
  value: 20
};

console.log(obj1.getValue.call(obj2)); // 输出: 20

传递多个参数

call 可以传递多个参数给目标函数:

function add(a, b) {
  return a + b + this.c;
}

const context = { c: 3 };
console.log(add.call(context, 1, 2)); // 输出: 6 (1+2+3)

实现继承

call 常用于构造函数继承中:

function Parent(name) {
  this.name = name;
}

function Child(name, age) {
  Parent.call(this, name); // 调用父类构造函数
  this.age = age;
}

const child = new Child('Tom', 5);
console.log(child.name); // 输出: Tom

类数组对象处理

call 可以将类数组对象转换为真正的数组:

function listToArray() {
  return Array.prototype.slice.call(arguments);
}

const arr = listToArray(1, 2, 3);
console.log(arr); // 输出: [1, 2, 3]

注意事项

  • 如果 thisArgnullundefined,在非严格模式下会自动替换为全局对象
  • 严格模式下 thisArg 不会被强制转换
  • call 会立即执行函数,与 bind 不同

apply 的区别

callapply 功能相似,主要区别在于参数传递方式:

call 实现 js

function sum(a, b, c) {
  return a + b + c;
}

// call 逐个传递参数
sum.call(null, 1, 2, 3);

// apply 以数组形式传递参数
sum.apply(null, [1, 2, 3]);

标签: calljs
分享给朋友:

相关文章

js实现拖拽

js实现拖拽

实现拖拽的基本步骤 使用JavaScript实现拖拽功能需要监听鼠标事件,包括mousedown、mousemove和mouseup。以下是实现的基本逻辑: const draggableEleme…

vue.js实现轮播

vue.js实现轮播

Vue.js 实现轮播功能 使用第三方库(推荐) Vue.js 生态中有许多成熟的轮播组件库,例如 vue-awesome-swiper 或 swiper,它们功能丰富且易于集成。 安装 swipe…

js实现祖玛

js实现祖玛

实现祖玛游戏的核心思路 祖玛游戏的核心玩法是发射彩色珠子,形成三个或以上相同颜色的珠子即可消除。以下是使用JavaScript实现的基本框架。 游戏初始化 创建画布并初始化游戏状态: const…

利用js实现

利用js实现

使用 JavaScript 实现 在 JavaScript 中,可以通过多种方式实现功能,具体取决于需求。以下是几种常见的方法: 方法一:使用原生 JavaScript // 示例代码 funct…

js实现vue路由

js实现vue路由

Vue 路由的基本实现 在 Vue.js 中实现路由功能通常使用 Vue Router 库。Vue Router 是 Vue.js 官方的路由管理器,用于构建单页面应用(SPA)。 安装 Vue R…

js节流实现

js节流实现

节流的概念 节流(Throttle)是一种限制函数执行频率的技术,确保函数在一定时间间隔内只执行一次。常用于滚动事件、窗口调整等高频触发的场景。 基础实现方法 使用时间戳判断是否执行函数: fun…