【问题标题】:Accessing the two 'this' variables in Function.prototype访问 Function.prototype 中的两个“this”变量
【发布时间】:2011-06-03 15:04:49
【问题描述】:

我想用自定义方法扩展 Function.prototype:

Function.prototype.myMethod = function() {
     var fn = this;
     var owner = ???;
     /** ... */
};

this 在该范围内指的是原始函数。但是我如何访问引用“拥有”该函数的对象的this(或者在调用fn时外部this是什么)?

【问题讨论】:

  • 我认为您无法知道它,因为您实际上并没有调用“原始”函数。无法知道函数是否分配给属性。你想做什么?也许有比扩展Function.prototype更好的方法。
  • 我正在尝试执行以下操作:Function.prototype.future = function() { var fn = this; var owner = ???; return fn.bind(owner, arguments); };
  • 没有“两个this 变量”。您唯一的选择是将其作为参数传入。
  • 我认为fn.bind.apply(owner) 不会像您期望的那样工作(如果owner 不是函数)。它仍然没有解释你的实际目标是什么。到目前为止,我只能假设扩展 Function.prototype 不是正确的方法。
  • 在这种情况下,我的目标是让从一个函数和一组参数中创建期货/承诺变得容易。结果可用于惰性求值。但可能还有其他应用程序。

标签: javascript function this prototype-programming


【解决方案1】:

您需要将其作为参数传递给函数调用...不确定这在您的特定用途中是否可行。

myMethod(this);

function myMethod( parent ) {
    // ...

【讨论】:

    【解决方案2】:

    SpiderMonkey 和 JScript 在函数对象上实现了一个非标准的“调用者”属性。不知道其他浏览器的支持程度。

    我相信它应该可以这样访问:

    Function.prototype.myMethod = function() {
       var fn = this;
       var owner = this.caller;
       /** ... */
    };
    

    但还没有测试过。正如我所说,它不是 ECMA 标准的一部分。

    https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/Caller

    【讨论】:

      猜你喜欢
      • 2013-06-12
      • 1970-01-01
      • 1970-01-01
      • 2015-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-06
      相关资源
      最近更新 更多