gpt4 book ai didi

javascript - 有哪位天才能告诉我这段小代码是怎么回事吗?来自 JavaScript 忍者的 secret

转载 作者:可可西里 更新时间:2023-11-01 02:35:18 25 4
gpt4 key购买 nike

我刚刚开始使用 JavaScript,我想知道是否有任何天才可以帮助我逐行理解这一点?

1:  Function.prototype.bind = function(){
2: var fn = this,
3: args = Array.prototype.slice.call(arguments),
4: object = args.shift();
5: return function(){
6: return fn.apply(object,
7: args.concat(Array.prototype.slice.call(arguments)));
8: };
9: };

我只是初学者,但如果你能教我,那你就太棒了。我了解原型(prototype)、调用、转移、应用,这样您就可以跳过初学者部分(尽管我认为您不应该这样,其他几乎没有接触 JS 的人可能会学习如何)。

注意:我知道有一些“相似的代码”在问相似的问题here但我要逐行解释,它们不是(不重复)(另外,您可以跳过第 8 和第 9 行):)

最佳答案

这是 EcmaScript 5 的 EcmaScript 3 的部分实现 bind方法 partial application .它使

myObject.method.bind(myObject, 1, 2)(3, 4)

相当于

myObject.method(1, 2, 3, 4)

但它也更方便,因为你可以这样做

var m = myObject.method.bind(myObject, 1, 2);
m(3, 4);
m(5, 6);

代替

myObject.method(1, 2, 3, 4);
myObject.method(1, 2, 5, 6);

Nit:两者并不完全等同,因为如果第一次调用 myObject.method 执行 this.method = somethingElse; 那么绑定(bind)的方法仍然会调用原创。

分解:

Function.prototype.bind = function(){

向内置函数类型添加方法。

var fn = this, 

存储this,它在正常使用中应该是一个Function,这样它就可以在闭包中使用。

args = Array.prototype.slice.call(arguments), 

创建一个数组,其中包含bind 的参数。

  object = args.shift();

args 中删除第一个参数并将其存储在 object 中。稍后应用时,这将用作 fnthis 值。

 return function(){

返回一个作为部分应用方法的函数。调用时这个函数

return fn.apply(object,

调用 .bind 左侧的函数,将第一个参数作为 this 传递给 bindapply 是一种特殊的函数反射方法,它允许使用类似于 python 中的 *args**kwargs 的参数数组调用函数, 或 Java 中的 ...

  args.concat(Array.prototype.slice.call(arguments)));

作为参数传递给 fnbind 的参数后跟闭包的参数。

关于javascript - 有哪位天才能告诉我这段小代码是怎么回事吗?来自 JavaScript 忍者的 secret ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9174112/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com