Javascript에서 일부 오래된 코드를 개체 리터럴 표기법으로 변환하고 있으며 약간의 버그 베어를 맞았습니다. 속성을 정의하는 방법을 알고 메서드를 정의하는 방법을 알고 있지만 메서드의 반환 값을 속성으로 지정하려면 어떻게해야합니까?메소드의 반환 값을 Javascript의 다른 객체 속성에 지정하려면 어떻게해야합니까?
Chrome 콘솔에서 오류 출력과 함께 코드를 제공했습니다. 내가 뭘 잘못하고 있는지 알 수는 없지만, 콘솔은 내가 글로벌 범위에 존재하지 않는 것 또는 존재하지 않는 무언가에 가려고하고 있다고 나에게 말하고있다. 여기있다 :
코드 :
var testobj = {
a: 2,
b: 4,
c: function() {
return this.a * this.b;
},
d: this.c(), // OK, got it, it's trying to call it from global scope. Fine.
e: function() {
if (this.d) {
console.log("SUCCESS");
console.log(this.d);
} else {
console.log("ERROR");
}
}
}
오류 :
TypeError: Object [object global] has no method 'c'
새로운 코드 :
var testobj = {
a: 2,
b: 4,
c: function() {
return this.a * this.b;
},
d: testobj.c(), // but if I change it like this, it still doesn't work. What gives?
e: function() {
if (this.d) {
console.log("SUCCESS");
console.log(this.d);
} else {
console.log("ERROR");
}
}
}
새로운 오류 :
TypeError: Cannot call method 'c' of undefined
내가 뭘 잘못하고 있는지 누가 알 수 있니?
이 경우 a 또는 b를 변경하면 'c'가 변경되지만 'd'는 변경되지 않습니다. 이것은 당신이 원하는 것이거나 그렇지 않을 수도 있습니다. 명심할 것. – Peter
예 이것이 OP가 달리 두 가지 동일한 속성을 정의하는 이유를 묻는 것입니다. obj.c() == obj.d()는 항상 같은 결과를 반환합니다. 그러나이 경우 그는 할 수 있습니다 (obj.c()! = obj.d) alert ("changed"); 트리거 변경 기능. –
아하, 사실, 나는 그것을 그렇게 보지 않고 있었다. – Peter