Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/471.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 访问两个';这';Function.prototype中的变量_Javascript_Function_This_Prototype Programming - Fatal编程技术网

Javascript 访问两个';这';Function.prototype中的变量

Javascript 访问两个';这';Function.prototype中的变量,javascript,function,this,prototype-programming,Javascript,Function,This,Prototype Programming,我想用自定义方法扩展Function.prototype: Function.prototype.myMethod = function() { var fn = this; var owner = ???; /** ... */ }; 该范围内的此指原始功能。但是如何访问引用“拥有”函数的对象的this(或者调用fn时外部this是什么?您需要将其作为参数传递给函数调用。。。不确定这在您的特定用途中是否可行 myMethod(this); function m

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

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

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

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

myMethod(this);

function myMethod( parent ) {
    // ...

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

myMethod(this);

function myMethod( parent ) {
    // ...

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

我相信它应该是这样的:

Function.prototype.myMethod = function() {
   var fn = this;
   var owner = this.caller;
   /** ... */
};
但我还没有测试过。正如我所说,它不是ECMA标准的一部分


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

我相信它应该是这样的:

Function.prototype.myMethod = function() {
   var fn = this;
   var owner = this.caller;
   /** ... */
};
但我还没有测试过。正如我所说,它不是ECMA标准的一部分


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