gpt4 book ai didi

JavaScript 对象。将对象实例化为对象的属性值

转载 作者:行者123 更新时间:2023-12-03 03:40:42 25 4
gpt4 key购买 nike

我在 JavaScript 中的对象实例化和范围方面遇到了一些问题...

查看此示例代码:

someOtherObj = {
aMethod: function() {
$('body').append('aMethod successfully called!<br>');
return 'd';
}
}

// THIS WORKS!!
$('body').append(someOtherObj.aMethod() + '<br>');

someObj = {
aValue: 'a',
bValue: 'b',
cValue: this.aValue, // THIS DOESN'T WORK!!
dValue: new someOtherObj(), // THIS DOESN'T WORK!!
eValue: {
fValue: aValue, // THIS DOESN'T WORK!!
gValue: this.aValue, // THIS DOESN'T WORK!!
hValue: someObj.aValue, // THIS DOESN'T WORK!!
},
};

// JavaScript crashes out before this, but...
// This should result in: 'a'
$('body').append(someObj.cValue + '<br>');

// This should result in: 'd'
$('body').append(someObj.dValue.aMethod() + '<br>');

// These should result in: 'a'
$('body').append(someObj.eValue.fValue + '<br>');
$('body').append(someObj.eValue.gValue + '<br>');
$('body').append(someObj.eValue.hValue + '<br>');

我认为这些评论是非常不言自明的......但话虽这么说:

  1. 如何制作 cValue 引用 (===) aValue,和/或具有相同的值 (==) 作为 aValue?
  2. 如何实例化一个新对象作为另一个对象的属性?
  3. 如何访问包含对象的属性?

最佳答案

How can I make cValue reference (===) aValue, and/or have the same value (==) as aValue?

你不能(除了使用相同的值来初始化它,例如cValue: 'a');更多信息请参见:Self references in object literal declarations .

或者,您可以将 cValue 设为返回 aValuegetter,尽管在​​这种情况下没有什么意义:

var obj = {
aValue: 42,
get cValue() {
return this.aValue;
}
};
console.log(obj.cValue); // 42
obj.aValue = 67;
console.log(obj.cValue); // 67

How can I instantiate a new object as the property of another object?

你做事的方式。您正在执行的操作(new someOtherObj())的问题是 someOtherObj 是一个对象,而不是构造函数. (构造函数是对象,但大多数对象不是构造函数。)

这是一个构造函数:

function Example() {
this.someProperty = "some value"; // This bit is optional; it's here to
// emphasize that constructors initialize
// the contents of the new object
}

这也是,通过 ES2015 class 语法:

class Example {
constructor() {
this.someProperty = "some value"; // Again, this bit is optional
}
}

在这两种情况下,这都有效:

var obj {
example: new Example()
};
console.log(example.someProperty); // "some value"

How can I access the property of a containing object?

通过 this,如果正在运行的代码以将 this 设置为对象的方式调用。例如:

var obj = {
answer: 42,
doSomething: function() {
console.log(this.answer);
}
};
obj.doSomething(); // 42

查看这些问题及其答案:

或者对于像这样的一次性对象,通过使用它们分配给的变量的名称:

var obj = {
answer: 42,
doSomething: function() {
console.log(obj.answer); // <== Only change is here
}
};
obj.doSomething(); // 42

关于JavaScript 对象。将对象实例化为对象的属性值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45641702/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com