能否将原生JavaScript的call和bind方法改写为长尾词实现?

2026-04-08 18:391阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计751个文字,预计阅读时间需要4分钟。

能否将原生JavaScript的call和bind方法改写为长尾词实现?

JavaScript 手动实现 call 和 bind 是编程中常见的话题。网上确实有很多关于如何自己实现 call 和 bind 的文章。然而,call 和 bind 的原理并非像某些文章描述的那样简单。

今天,我就来揭开这些原理的真相。首先,我们需要明确 call 和 bind 的真正作用。

call 和 bind 都是为了改变函数的 this 指向而设计的。具体来说:

能否将原生JavaScript的call和bind方法改写为长尾词实现?

- call 方法允许你调用一个对象的一个方法,同时传入一个对象的上下文(即 this 指向的对象)。- bind 方法则返回一个新函数,当这个新函数被调用时,其 this 指向由 bind 方法指定的对象。

接下来,让我们来看看这些方法的实际实现原理。

call 的实现原理

1. 创建一个临时的函数,这个函数的 this 指向指定的对象。

2.将要调用的函数的参数作为参数传递给这个临时的函数。

3.调用临时的函数,并返回其返回值。

bind 的实现原理

1. 创建一个临时的函数,这个函数的 this 指向由 bind 方法指定的对象。

2.将要调用的函数的参数作为参数传递给这个临时的函数。

3.返回这个临时的函数。

简单来说,call 和 bind 的实现都是基于闭包和函数的 this 指向原理。希望这篇文章能帮助你更好地理解 call 和 bind 的原理。

js手动实现call和bind都是谎言

网上有很多关于说自己实现call和bind的原理的文章,然而call和bind的原理真如他们所说的那样吗?今天就让我来推翻这些所谓的”原理“,揭开谎言下的真相。

首先看看网上对call的实现:

// 手写 call Function.prototype.mycall = function (context) { context = context || window; context.fn = this; const args = [...arguments].slice(1); const result = context.fn(...args); // 执行fn时上下文context已被修改,不是我们所期望的call delete context.fn; return result; } function show() { console.log(this); } show.mycall({haha:122});

以上代码的执行结果是

如你所见,这样实现的call并不是我们所期望的那样。

对比于函数自带的call:

show.call({haha:122})

其结果为

分析其原因不难发现,根据函数mycall,执行context.fn(...args)之前修改了上下文context,所以执行fn时所使用的上下文是修改后的上下文,导致与预期结果相差甚远。

核心

而且,往更深的层次去思考,call绝不是这样(或类似这样)实现的,call是底层语言为浏览器封装好的函数,是绝对不能也没必要用js强行模仿的。

综上,js模仿call和bind绝对没有get到底层原理,这样的模仿只能用于娱乐而已,没有实际价值。bind和call类似,这里就不赘述了。

本文共计751个文字,预计阅读时间需要4分钟。

能否将原生JavaScript的call和bind方法改写为长尾词实现?

JavaScript 手动实现 call 和 bind 是编程中常见的话题。网上确实有很多关于如何自己实现 call 和 bind 的文章。然而,call 和 bind 的原理并非像某些文章描述的那样简单。

今天,我就来揭开这些原理的真相。首先,我们需要明确 call 和 bind 的真正作用。

call 和 bind 都是为了改变函数的 this 指向而设计的。具体来说:

能否将原生JavaScript的call和bind方法改写为长尾词实现?

- call 方法允许你调用一个对象的一个方法,同时传入一个对象的上下文(即 this 指向的对象)。- bind 方法则返回一个新函数,当这个新函数被调用时,其 this 指向由 bind 方法指定的对象。

接下来,让我们来看看这些方法的实际实现原理。

call 的实现原理

1. 创建一个临时的函数,这个函数的 this 指向指定的对象。

2.将要调用的函数的参数作为参数传递给这个临时的函数。

3.调用临时的函数,并返回其返回值。

bind 的实现原理

1. 创建一个临时的函数,这个函数的 this 指向由 bind 方法指定的对象。

2.将要调用的函数的参数作为参数传递给这个临时的函数。

3.返回这个临时的函数。

简单来说,call 和 bind 的实现都是基于闭包和函数的 this 指向原理。希望这篇文章能帮助你更好地理解 call 和 bind 的原理。

js手动实现call和bind都是谎言

网上有很多关于说自己实现call和bind的原理的文章,然而call和bind的原理真如他们所说的那样吗?今天就让我来推翻这些所谓的”原理“,揭开谎言下的真相。

首先看看网上对call的实现:

// 手写 call Function.prototype.mycall = function (context) { context = context || window; context.fn = this; const args = [...arguments].slice(1); const result = context.fn(...args); // 执行fn时上下文context已被修改,不是我们所期望的call delete context.fn; return result; } function show() { console.log(this); } show.mycall({haha:122});

以上代码的执行结果是

如你所见,这样实现的call并不是我们所期望的那样。

对比于函数自带的call:

show.call({haha:122})

其结果为

分析其原因不难发现,根据函数mycall,执行context.fn(...args)之前修改了上下文context,所以执行fn时所使用的上下文是修改后的上下文,导致与预期结果相差甚远。

核心

而且,往更深的层次去思考,call绝不是这样(或类似这样)实现的,call是底层语言为浏览器封装好的函数,是绝对不能也没必要用js强行模仿的。

综上,js模仿call和bind绝对没有get到底层原理,这样的模仿只能用于娱乐而已,没有实际价值。bind和call类似,这里就不赘述了。