javascript - 클릭 - 팝업 타이틀 바꾸기




작성하는 동안 동일한 객체의 속성을 참조하려면 어떻게해야합니까? (4)

@ RobG가 논평 한대로 - 아니, 할 수 없다.

그러나 다음과 같이 this 키워드를 객체의 속성으로 정의 된 함수 내에서 사용할 수 있습니다.

o = {
  a: { foo: 42 },
  b: function () {
      return this.a;
  }
}

console.log(o.b()); // {foo: 42};

이 질문에는 이미 답변이 있습니다.

나는 같은 것을하기 위해 노력하고있다.

o = {
  a: { foo: 42 },
  b: o.a
}

그러나 그것은 o가 정의되지 않았다는 에러를 반환합니다. 나는 나중에 ob = oa 할 수 있습니다.하지만 o 정의하는 동안 b 정의 할 수 있는지 궁금하네요.


그것은 불가능합니다.

속성 값을 평가할 때 개체가 EcmaScript 식에서 볼 수있는 범위에 바인딩되지 않습니다.

EcmaScript 언어 스펙의 11.1.5 절은 객체 생성자 구문이 어떻게 작동하는지 설명합니다.

다음은 첫 번째 속성 키 값 쌍을 평가하는 부작용으로서 개체가 생성되는 방법을 설명합니다

PropertyNameAndValueList : PropertyAssignment 프로덕션은 다음과 같이 평가됩니다.

  1. objnew Object() 라는 표현식에 의해 새로운 객체를 생성 한 결과입니다. Object 는 그 이름을 가진 표준 내장 생성자입니다.
  2. propId를 PropertyAssignment 를 평가 한 결과로합시다.
  3. propId.name , propId.descriptorfalse 인수를 사용하여 obj 의 [[DefineOwnProperty]] 내부 메소드를 호출하십시오.
  4. obj를 반환합니다.

PropertyAssignmentobj 가 생성 된 후에 평가되지만 obj 는 절대로 EcmaScript 표현식에 액세스 할 수있는 이름에 바인딩되지 않습니다.

모든 속성 값이 평가 된 후에 만 ​​프로그램의 o 또는 다른 기호에 할당 된 것이 모두 있습니다.


이것은 지금 고대의 역사 일뿐입니다.하지만 저는 여러분의 상황에 완벽하게 맞는 게터와 세터 에 대해 배웠습니다. 그리고이 문제를 보는 사람들이 그걸로 가치를 얻을 수있을 것이라고 확신합니다.

o = {
  a: { foo: 42 },
  get b() {
    return this.a
    }
  }

console.log(o.b) // => { foo: 42 }

o = {};
o.a = {foo: 42};
o.b = o.a;




object