香草JS | Invokable对象,也包含属性

时间:2016-04-04 06:50:33

标签: javascript json

我在某些任务中被要求执行以下操作:

  

fun4():返回一个可以作为函数调用的对象。此对象还应具有带空值的'k'属性(因此fun4()()应该执行某些操作)

问题的第一部分简单易懂。 第二个是我的问题。 如何在JS中创建一个可以静态访问的对象。

简化: 可以创建一个行为如下的对象:

> let o = CustomObject;
> o.k
< null
> o()
< //Some value returned here from the function

谢谢!

3 个答案:

答案 0 :(得分:1)

对我而言,这看起来非常简单......

let CustomObject = function(){ return "hello"; }
CustomObject.k = null;

这将通过您的验收标准

答案 1 :(得分:1)

至于vanilla js,这就是你要找的东西:

var fun4 = function () {
    let val = function () { console.log("hello"); };
    val.k = null;

    return val;
}


fun4()   // returns the function
fun4()() // logs 'hello'
fun4().k // returns null

鉴于您上面的一条评论,需要注意的一点是您使用letvar。在这种情况下,可以使用var而没有任何差别(当函数返回时val超出范围时,将释放变量以进行垃圾收集)。但是,当您在控制台中运行它时(并且当不在函数或其他明确定义且隔离的范围内)时,使用let创建的变量将在每次调用后被销毁 - 换句话说,每当您按下时返回。证明这一点的方法是比较这些:

var test = function () {
    let x = 1;
    let x = 1;  // this will cause an immediate syntax error when the script is parsed;
}

另一方面:

> let x = 1;
< undefined
> let x = 1; // In the console, this will not raise any error/exception
             // because the scope is cleared after the line above has
             // executed and returned
< undefined

答案 2 :(得分:0)

您可以看到如下的'k'属性。

enter image description here