从函数体内部访问函数对象的属性

Kwi*_*wiZ 9 javascript properties function

javascript中的函数也是一个对象,可以具有属性.那么有没有办法从它自己的函数体内访问它的属性?

像这样

var f = function() { 
  console.log(/*some way to access f.a*/);
};
f.a = 'Test';
f(); //should log 'Test' to console
Run Code Online (Sandbox Code Playgroud)

pra*_*999 12

arguments.callee 是函数本身,不受函数名称的影响。

var f = function() { 
  console.log(arguments.callee.a);
};
f.a = 'Test';
f();
Run Code Online (Sandbox Code Playgroud)

  • 很好的答案!我相信这是最干净的方法。在 torazaburo 答案中,将函数绑定到自身会在使用“this”时丢失其父级的引用,如果函数没有标识符(即匿名函数),Christos 答案将不起作用 (3认同)
  • `arguments.callee` 在严格模式下是被禁止的,因为它会阻止某些类型的 VM 性能优化。请参阅 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/arguments/callee 并调用 `fa` (3认同)

小智 6

执行此操作的经典方法是将函数绑定到自身,然后它可以通过this以下方式访问自己的属性:

 var f = function() { 
   console.log(this.a);    // USE "THIS" TO ACCESS PROPERTY
 };

 f.a = 'Test';
 f = f.bind(f);            // BIND TO SELF

 f();                      // WILL LOG 'Test' TO CONSOLE
Run Code Online (Sandbox Code Playgroud)