programing

JavaScript 개체는 어떻게 값 자체를 참조할 수 있습니까?

sourcejob 2023. 1. 27. 21:18
반응형

JavaScript 개체는 어떻게 값 자체를 참조할 수 있습니까?

다음과 같은 JavaScript가 있다고 가정합니다.

var obj = {
 key1 : "it ",
 key2 : key1 + " works!"
};
alert(obj.key2);

이 오류는 "key1 is not defined"입니다.난 시도했다.

this.key1
this[key1]
obj.key1
obj[key1]
this["key1"]
obj["key1"]

절대 정의되지 않는 것 같기도 하고요.

key2가 key1의 값을 참조하도록 하려면 어떻게 해야 합니까?

함수에 대한 속성을 삭제하는 것을 고려해 볼 수 있습니다.내 말은 이런 거야.

var obj = {
  key1: "it ",
  key2: function() {
    return this.key1 + " works!";
  }
};

alert(obj.key2());

이는 리터럴 대신 생성자 함수를 사용하여 수행할 수 있습니다.

var o = new function() {
  this.foo = "it";
  this.bar = this.foo + " works"
}

alert(o.bar)

개체를 초기화하기 전에는 개체의 속성을 참조할 수 없습니다. 외부 변수를 사용하십시오.

var key1 = "it";
var obj = {
  key1 : key1,
  key2 : key1 + " works!"
};

또한 이것은 "JSON 객체"가 아니라 Javascript 객체입니다.JSON은 객체를 문자열(유효한 Javascript 코드)로 표현하는 방법입니다.

다른 방법으로는 getter/setter 메서드를 사용하는 방법이 있습니다.

예를 들어, 계산된 값 읽기에만 관심이 있는 경우:

var book  = {}

Object.defineProperties(book,{
    key1: { value: "it", enumerable: true },
    key2: {
        enumerable: true,
        get: function(){
            return this.key1 + " works!";
        }
    }
});

console.log(book.key2); //prints "it works!"

그러나 위의 코드에서는 key2에 다른 값을 정의할 수 없습니다.

따라서 key2의 값도 재정의하고 싶은 경우에는 좀 더 복잡해집니다.이 값은 항상 계산된 값입니다.아마 그게 네가 원하는 거겠지

그러나 key2의 값을 재정의하려면 계산과는 별도로 값을 캐시할 장소가 필요합니다.

약간 이런 느낌:

var book  = { _key2: " works!" }

Object.defineProperties(book,{
    key1: { value: "it", enumerable: true},
    _key2: { enumerable: false},
    key2: {
        enumerable: true,
        get: function(){
            return this.key1 + this._key2;
        },
        set: function(newValue){
            this._key2 = newValue;
        }
    }
});

console.log(book.key2); //it works!

book.key2 = " doesn't work!";
console.log(book.key2); //it doesn't work!

for(var key in book){
    //prints both key1 and key2, but not _key2
    console.log(key + ":" + book[key]); 
}

또 다른 흥미로운 대안은 자기 초기화 개체를 사용하는 것입니다.

var obj = ({
  x: "it",
  init: function(){
    this.y = this.x + " works!";
    return this;
  }
}).init();

console.log(obj.y); //it works!

왜냐하면 이 문장이 다음을 정의하기 때문입니다.obj아직 끝나지 않았다.key1아직 존재하지 않습니다.이 솔루션을 검토해 주십시오.

var obj = { key1: "it" };
obj.key2 = obj.key1 + ' ' + 'works!';
// obj.key2 is now 'it works!'

참조할 수도 있습니다.obj기능 안에 들어가면this.

var obj = {
    key1: "it",
    key2: function(){return obj.key1 + " works!"}
};
alert(obj.key2());

이것은 JSON 객체가 아니라 객체 리터럴 표기법으로 작성된 Javascript 객체입니다.(JSON은 데이터 교환을 위한 텍스트 표기법입니다(more).문자열이 아닌 JavaScript 소스 코드를 다루고 있다면 JSON을 다루고 있지 않습니다.)

Initializer가 완료될 때까지 작성 중인 객체에 대한 참조를 가져올 수 없기 때문에 초기화 중인 객체의 다른 키를 참조할 수 없습니다. (와 유사한 키워드는 없습니다.)this또는 이 상황을 위해 무언가를 합니다.)

이것은 JSON이 아닙니다.JSON은 단순하도록 설계되어 있습니다.임의의 식을 허용하는 것은 간단하지 않습니다.

자바스크립트 부분은 할 수 없습니다.this」라고 하는 가 될 obj완전히 구성되었습니다.따라서 저보다 더 많은 JavaScript-fu를 가진 사용자가 해결 방법이 필요합니다.

언급URL : https://stackoverflow.com/questions/2787245/how-can-a-javascript-object-refer-to-values-in-itself

반응형