【问题标题】:Reference own properties on initialization [duplicate]在初始化时参考自己的属性[重复]
【发布时间】:2013-04-03 02:14:47
【问题描述】:

可以在初始化对象时引用自己的属性吗?

我有一个对象应该是唯一的,并且只作为一个对象存在,所以我 没有初始化程序等。

使用这样的东西:

var Myobj = {
    property1 : aaa,
    property2 : bbb,
    property3 : {a: self.property1 }
                /*  ^-- is this somehow possible without using a function? 
                        Or a better way to solve / structure this. .init() 
                        best option? */
};

>> Fiddle

real 对象(在实际代码中)有一个 add 函数,它接受选项 使用什么函数等。它是 "addEventListener" 的包装器,其中 关键是能够删除侦听器 - 这需要非匿名函数 参考。

Myobj 中使用的函数由字符串或选项中的数字键指定 Myobj.add().

【问题讨论】:

  • 不,如果没有程序代码,这将无法工作。您不能从对象内部引用尚未完全初始化并分配给变量的对象的其他部分。
  • 抱歉这里有重复。我的搜索词组不知何故错过了这一点。
  • 别担心——这有点难找,因为还有很多关于“object”、“property”、“reference”和“initialization”的问题在他们之中。我知道存在重复项(因为我以前见过出现),但我还是花了一段时间才找到它。
  • 我的回答不行吗?
  • 感谢@deceze,您在这里对您的 cmets 提供了一些见解。我将在 init() 函数中使用 过程代码

标签: javascript


【解决方案1】:

Object literals 保持 undefined 直到关闭 },因此您必须将 property3 设为函数或将整个对象设为函数。

var Myobj = {
    property1 : 'aaa',
    property3 : function (){ return { a : this.property1 } }
};

var MyObj = function(){
  this.property1 = 'aaa',
  this.property3 = { a: this.property1 }
}
var MyObjInstance = new MyObj();

这个问题被问了很多次了:Access properties while declaring object?

【讨论】:

  • 谢谢。相信我现在看得更清楚了。只需决定要使用的设计。
  • 您的var aMyobj.property3.a 不同。两者的可见性/范围非常不同。
  • 我的错误,已更新以反映 property3.a
  • 你还是得像Myobj.property3().a一样访问它,这和Myobj.property3.a不一样。
  • 是的,但这是一种妥协
【解决方案2】:

如果你使用占位符数组,它会起作用:

var prop = new Array();
var Myobj = {
    property1 : 'aaa',
    property2 : 'bbb',
    property3 : {a: prop}
};
prop.push(Myobj.property1);

window.alert(Myobj.property3.a);

http://jsfiddle.net/y2XwC/1/

【讨论】:

  • 谢谢。有趣的方法。我不相信我会在这种情况下使用它,但如果合适的话,我会记住它作为设计选项。
  • 这使得Myobj.property3.a[0] == 'aaa'。与Myobj.property3.a == 'aaa'不同。
  • @deceze 它不需要索引就可以工作。
  • 取决于您如何定义“作品”。它一个数组,所以像Myobj.property3.a.substr(1)这样的东西不起作用。
  • 优点是数组是可变的,所以他可以稍后更改值:jsfiddle.net/y2XwC/3
猜你喜欢
  • 2011-11-18
  • 1970-01-01
  • 2015-05-07
  • 2020-11-29
  • 1970-01-01
  • 1970-01-01
  • 2014-07-17
  • 1970-01-01
  • 2012-02-07
相关资源
最近更新 更多