【问题标题】:Why can't I use IIFE to generate an object value with this context?为什么我不能使用 IIFE 在此上下文中生成对象值?
【发布时间】:2018-12-30 13:03:14
【问题描述】:

我有这个功能

const obj = {
  key1: 0.1,
  key2: (function(){return this.key1 +' units'})(),
  key3: function(){return this.key1 +' units'},
}

ob其实是{ key1: 0.1, key2: 'undefined units', Function }

并且 obj.key3() 按预期给出0.1 units

【问题讨论】:

  • 因为this 不是obj
  • this 是指代码中封闭函数的上下文,而不是 obj
  • obj.key3() 将在对象创建后运行该函数,它作为方法调用运行,分配thisobj.key2 将运行声明了 obj 但尚未分配的函数,并且 IIFE 未分配 this
  • 有道理,如何从IIFE访问全局obj
  • 你不能因为如果你尝试你会得到ReferenceError: can't access lexical declaration 'obj' before initialization

标签: javascript object this iife


【解决方案1】:

IIFE 在obj 被初始化时被调用。 key1obj 内。所以你得到一个未定义的错误。尽早声明key1

var obj = (function(){
  var key1 = 0.1;
  
  return {
    key1: key1,
    key2: (function(){
      return key1 +' units';
    })(),
    key3: function(){
      return this.key1 +' units'
    }
  };
})();

console.log(obj)

【讨论】:

  • 在这种情况下,你为什么需要内部 IIFE?为什么不只是key2: key1 +' units',
  • 我只是添加了它,因为它在原始代码中,他的问题是关于 iife。我们也可以像key2: key1 +' units' 一样。
  • "IIFE 在 obj 初始化之前被调用"... 怎么样?正是对象初始化首先定义了 IIFE。你的措辞似乎是一种预知!也许在初始化期间在完成之前或类似的东西是更好的选择......
  • 谢谢@GerardoFurtado
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-10-26
  • 2023-04-09
  • 1970-01-01
  • 2010-10-06
  • 2022-07-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多