gpt4 book ai didi

Javascript 和 [bind] 实现?

转载 作者:行者123 更新时间:2023-11-29 19:56:36 25 4
gpt4 key购买 nike

我阅读了一些关于 JS 中的绑定(bind)实现的内容(来自 John Resig 的书):

它看起来像这样:(jsbin)

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

我可以这样测试它:

var myObject = {};

function myFunction()
{
return this == myObject;
}


//---------
if (!myFunction()) alert("Context is not set yet"); //not set ye

var bindedFunction= myFunction.bind(myObject)

if (bindedFunction()) alert( "Context is set properly"); //set properly
//---------

不过我有两个问题:

问题#1

在第 3 行中,this 是指执行的函数,对吗?但是 this 不应该是:“object which holds the function”?

如果我在绑定(bind)函数中执行alert(this),我会看到:

function myFunction()
{
return this == myObject;
}

问题#2

在第 9 行,为什么返回函数是

  return function ()
{
return fn.apply ...
};

并且不是

  return function ()
{
fn.apply ...
};

我不明白:

返回的函数创建一个闭包并且应该返回一个只执行fn.apply(o....

的函数

我不明白为什么它会返回额外的 return :就像在 return fn.apply(o....

最佳答案

Function.bind 的上下文中(没有双关语意) , this确实指的是当前调用的函数,而不是可能包含它作为方法的“对象”。

记住函数是 JS 中的第一类对象,当你写的时候

myFunction.bind()

然后 myFunction 对象并且.bind然后是该对象的方法(通过 Function.prototype 继承),然后当您调用它时,将应用正常规则 - this === myFunction .

对于 q.2,fn.apply结果是必需的,以便绑定(bind)函数也可以返回结果,就像原始函数可能具有的那样。

关于Javascript 和 [bind] 实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15946939/

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