2009-03-05 3 views
0

나는 이것이 브라우저에서 직접 어떻게 수행되는지 궁금합니다. Javascript Engines의 Array .length 속성은 사실 보이지 않는 setter 및 getters를 사용하여 ECMA 표준의 기능을 구현한다고 들었습니다. "길이 속성이 변경 될 때마다 값이 작지 않은 배열 색인 이름 인 모든 속성 새 길이가 자동으로 삭제됩니다 "). 나는이 경우 setter가 필요하다는 것을 알고 있지만 getter는 무엇을해야합니까? 이 값을 얻기 위해 네이티브 게터를 정말로 호출해야합니까? 또는 이것은 Javascript Engine을 어딘가에서 이해하는 데있어 단지 약간의 실수 일뿐입니다.Javascript Array .length JavascriptEngine의 속성/메소드

답변

3

속성을 필드 또는 세터/getter 메소드로 구현 중 ...

var obj = {myProp:0}.myProp; // getting 
obj.myProp = 1; // setting 

위의 예는 약간 펑키,하지만 난 당신이 생각을 생각합니다.

필드의 경우 값을 설정하면 값이 변경 될 때보 다 더 이상 값이 변경되지 않습니다.

값이 설정 될 때마다 더 많은 작업을 수행하기 위해 setter 메서드가있는 경우 getter 메서드가 값을 반환하는 것 이상의 작업을 수행하지 않더라도 일치시킬 getter 메서드가 있습니다. 속성을 구현하는 두 가지 방법을 섞어 쓰고 싶지는 않습니다. 어느 방향으로나 쉽게 들어가는 것이 훨씬 간단합니다.

2

defineGetter and defineSetter을 살펴보십시오. 이것은 파이어 폭스가하는 방법 일지 모르지만 다른 브라우저에 대해서는 잘 모르겠습니다.

정말 중요한가요? .length는 내가 아는 모든 것을 C++로 구현할 수 있습니다. 그것은 자바 스크립트 엔진의 내장 된 부분 일 수 있으며 어쨌든 자바 스크립트에서는 실제로 구현할 수 없습니다. 사용자가 알 필요가있는 것은 길이가 배열의 길이를 유지한다는 것입니다. 배열을 변경하면 배열의 길이가 변경됩니다.

+0

네이티브 개체는 고유 한 getters/setter를 가질 수 있습니다. –

1

먼저 JavaScript Array 객체에는 .length() 함수 속성이 있습니다.이 속성은 배열 인스턴스의 현재 길이를 반환합니다. 게터와 세터는 자바 스크립트 1.6에서 정의 될 수 있지만 널리 채택되지는 않았으며 많은 것을 사용하지 못했습니다. getter와 값을 반환하는 함수의 유일한 차이는 구문입니다. 게터와 세터는 할당 방향에 따라 엔진에서 호출 할 수 있습니다.