我在某些任务中被要求执行以下操作:
fun4():返回一个可以作为函数调用的对象。此对象还应具有带空值的'k'属性(因此fun4()()应该执行某些操作)
问题的第一部分简单易懂。 第二个是我的问题。 如何在JS中创建一个可以静态访问和的对象。
简化: 可以创建一个行为如下的对象:
> let o = CustomObject;
> o.k
< null
> o()
< //Some value returned here from the function
谢谢!
答案 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
鉴于您上面的一条评论,需要注意的一点是您使用let
和var
。在这种情况下,可以使用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)