gpt4 book ai didi

Javascript - 将对象的成员函数放在独立变量中?

转载 作者:行者123 更新时间:2023-11-30 11:30:04 25 4
gpt4 key购买 nike

我正在尝试将来自特定对象的成员函数放入独立变量中,希望能够通过简单地使用新变量来调用函数(在原始对象上)。

所以像这样:

var str = "abcdefgh";
var fn = str.indexOf;
console.log(fn("e")); // supposed to output 4

所以 fn(x) 应该和 str.indexOf(x) 做同样的事情。但这不起作用。还有另一种方法可以解决这个问题吗?

请注意,这里的难点在于我希望 fn 在那个特定的 str 对象上调用函数。所以 fn 将变成某种闭包。

最佳答案

来自You Don't Know JS Series , JS是这样判断this

  1. 函数是用new(新绑定(bind))调用的吗?如果是这样,这就是新构造的对象。

    var bar = new foo()

  2. 函数是用call还是apply(显式绑定(bind))调用的,偶隐藏在绑定(bind)硬绑定(bind)中?如果是这样,这是明确的指定对象。

    var bar = foo.call( obj2 )

  3. 调用的函数是否带有上下文(隐式绑定(bind)),否则称为拥有或包含对象?如果是这样,这就是那个上下文对象。

    var bar = obj1.foo()

  4. 否则,默认 this(默认绑定(bind))。如果在严格模式下,选择未定义的,否则选择全局对象。

    var bar = foo()

你的问题

当你在 str.indexOf('e') 上调用 indexOf 时,JS 引擎开始查找函数中的上下文。它会发现您已使用字符串对象上的 . 符号调用了该函数,并将上下文引用给它。但当您获得函数的引用并尝试像 fn 一样调用时,引擎开始搜索上下文(上面提到的)但没有找到任何东西。否则,当您在外部获得函数引用时,它会失去它的上下文。所以你需要明确给出上下文。

我在这里写道,每当调用 fn 时,函数内的 this 将引用 str 变量。

var str = "abcdefgh";
var fn = str.indexOf.bind(str);
console.log(fn("e")); // supposed to output 4

关于Javascript - 将对象的成员函数放在独立变量中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46585116/

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