从函数中获取函数对象属性

时间:2016-12-07 18:26:12

标签: javascript

在JavaScript中,函数可以具有属性。像这样:

var f = function(){ console.log("Hello!"); }
f.x = "Whoohoo";

如何从变量f超出范围后可能长时间调用的x内的代码中检索f()

3 个答案:

答案 0 :(得分:4)

您可以使用property accessor,就像作业一样。



var f = function() { console.log("Hello! " + f.x); }
f.x = "Whoohoo";

console.log(f.x);
f();




对于稳定访问,您可以使用命名函数



var f = function foo() { console.log("Hello! " + foo.x); }
//               ^^^ >>>>>>>>>>>>>>>>>>>>>>>>>>> ^^^
f.x = "Whoohoo";

console.log(f.x);
f();




答案 1 :(得分:0)

如果你需要更强大(但也更冗长):

var f = (function(){
    var func = () => {
        console.log(func.a)
    }
    return func
})()
f.a = 'Whoohoo'

// trying to break it
var a = f
f = 'somethingelse'
a()

答案 2 :(得分:0)

如果您正在寻找的只是从函数f中访问该属性,您只需引用函数对象(如果它是函数表达式,则通过变量名称,或者通过函数名称引用如果它是一个功能声明)。

例如:

var f = function(){ return f.x; };
f.x = "Whoohoo";

// f() => "Whoohoo"

var b = function(){ return f.x; ];

// b() => "Whoohoo"

但是,你提到在变量f超出范围后很长时间内调用f"与JavaScript的词汇范围相矛盾。除非您从定义函数的同一范围执行此操作,否则不能调用函数f,或者从引用函数定义位置的子范围调用函数f。如果您超出范围",则调用f将引发参考错误。