的问题是,你正在尝试引用您的对象与这个,虽然不存在了。该这个你可以参考不确定(如你的情况),然后导致错误“未定义无法读取x属性”。
但是,这个可能会根据情况绑定到上下文中的另一个对象。在这种情况下,你不会采取这种错误,无论值对应于绑定的对象将返回为这。
试图获取从检索值这个对象可能会导致2例,这两者是不是你想要的东西。
- 检索到的这有宽度和高度属性,让你的功能会得到这些值,并计算相应的结果。但是这些价值观不会是你在对象中传递的价值观。
- 检索到的这没有一个宽度或高度属性,让你的功能将得到不确定,因为它的参数,并相应地给出错误。
有很多方法可以解决这个问题。这是我的主张:
这里的主要问题是区域的值是在构建对象时急切计算的。冻结计算并在创建对象后触发它将计算对象内的正确值。
// first the calculation function
const calculateArea = (height, width) => {
return height * width
}
// then the object itself...
const myObj = {
height: 20,
width: 10,
// init, is a function that uses bounded context's width, height
init: function() {
this.area = calculateArea(this.height, this.width);
delete this.init; // We don't want init in our result object
return this;
}
}.init();
现在,当我们调用对象的init(),我们将有我们的这指向正确的对象。它会用this.width和this.height来计算面积。它也将删除结果对象中的init()函数,返回的对象作为你想要的形式。
我们刚刚暂停计算一个步骤,让我们的这个指向正确的上下文,然后继续。
[对象字面声明中的自引用]的可能重复(http://stackoverflow.com/questions/4616202/self-references-in-object-literal-declarations) – Li357
它需要在对象被调用后调用创建时,您仍然无法在定义对象属性时引用它。 –
'常量MyObj中= { 高度:20, 宽度:10, 面积:功能(){ 返回this.height * this.width } }' – Smiranin