当前位置:首页 > JavaScript

js call 实现

2026-01-30 21:18:25JavaScript

js call 实现

实现 call 方法

call 是 JavaScript 中函数的一个方法,用于改变函数的 this 指向并立即执行。可以通过以下方式手动实现:

Function.prototype.myCall = function(context, ...args) {
  context = context || window;
  const fn = Symbol('fn');
  context[fn] = this;
  const result = context[fn](...args);
  delete context[fn];
  return result;
};

实现原理

  1. 将函数设置为传入对象的属性,这样函数内的 this 就会指向该对象。
  2. 使用 Symbol 确保属性名唯一,避免覆盖原有属性。
  3. 执行函数并保存结果,最后删除临时属性并返回结果。

使用示例

function greet(message) {
  console.log(`${message}, ${this.name}`);
}

const person = { name: 'Alice' };

greet.myCall(person, 'Hello'); // 输出: "Hello, Alice"

注意事项

  • 第一个参数为 nullundefined 时,this 会指向全局对象(浏览器中为 window)。
  • 使用剩余参数 ...args 收集所有传入的参数,确保兼容不同数量的参数。

js call 实现

标签: jscall
分享给朋友:

相关文章

jquery.js

jquery.js

jQuery 简介 jQuery 是一个快速、简洁的 JavaScript 库,用于简化 HTML 文档遍历、事件处理、动画设计和 Ajax 交互。它的设计宗旨是“Write Less, Do Mor…

js 实现继承

js 实现继承

原型链继承 通过让子类的原型对象指向父类的实例来实现继承。子类实例可以访问父类原型上的属性和方法。 function Parent() { this.name = 'parent'; } Pa…

js实现图片放大缩小

js实现图片放大缩小

实现图片放大缩小的基础方法 使用CSS的transform: scale()属性可以快速实现图片的放大缩小效果。通过JavaScript动态修改该属性值: const img = document…

js实现类

js实现类

JavaScript 实现类的几种方式 JavaScript 是一种基于原型的语言,但在 ES6 之后引入了 class 语法糖,使得实现类更加直观。以下是几种常见的实现方式: 使用构造函数 传统…

js实现pdf在线预览

js实现pdf在线预览

使用PDF.js实现PDF在线预览 PDF.js是由Mozilla开发的一个开源JavaScript库,可以在网页中直接渲染PDF文件。以下是实现PDF在线预览的步骤: 引入PDF.js库 在HT…

js实现换肤

js实现换肤

使用CSS变量实现换肤 通过CSS变量可以轻松实现主题切换功能。CSS变量在根元素中定义,通过JavaScript动态修改这些变量值。 :root { --primary-color: #34…