>  기사  >  웹 프론트엔드  >  Javascript 쓰기 가능 기능 소개_javascript 기술

Javascript 쓰기 가능 기능 소개_javascript 기술

WBOY
WBOY원래의
2016-05-16 16:12:311087검색

js의 기능 태그에 대해 이야기할 때면 항상 이상한 느낌이 듭니다. 그런데 왜 이 속성에 대해 이야기하는 걸까요? 우리 모두는 window 객체가

브라우저 창의 인스턴스입니다. 이 인스턴스는 다음과 같은 "속성"과 "메서드"를 가져야 합니다.

일반적으로 함수를 사용할 때 이름, 나이 등과 같은 일부 속성을 정의하고 해당 속성에 대해 삭제, 설정 및 업데이트 작업을 수행할 수도 있습니다.

그럼 다음 질문이 나오네요. 내 사람 객체의 이름은 동적으로 수정이 가능하기 때문에 이 원리에 따르면 창 아래 정의되지 않은 값도 수정이 가능해야 하는데, 살펴보고 싶습니다. .

결과는 여전히 예측 가능합니다. 정의되지 않은 값을 성공적으로 수정하지 못했는데 왜 이런 일이 발생합니까? 이전 글에서 언급한 패키징 유형은 아니지만, 결과를 존중해야 한다는 것은 실제로는 js의 하위 레이어가 그러한 결과를 가져왔음에 틀림없다는 의미입니다. js에서는 기본적으로 Writable=을 사용합니다. false로 표시하면 정의되지 않은 속성을 자세히 살펴보겠습니다.

1: [쓰기 가능] 기능

속성이 쓰기 가능한지 여부에 대해 이야기할 때 C#의 get/set 접근자 또는 읽기 전용 키워드를 생각해 보면 분명히 속성의 읽기 전용 작업을 수행하는 방법에 관심이 있을 것입니다. js에서는 단지 DefineProperty 메소드를 사용해야 합니다.

위의 예에서 세 가지 흥미로운 점을 확인할 수 있습니다.

<1>: 저는 person.name을 읽기 전용 필드로 바꾸기 위해 defineProperty 메소드를 사용했습니다. 누군가는 이것이 분명히 메소드인데 어떻게 기능이 될 수 있다고 말할 것입니다. 🎜>

                                                                                                             > , js에는 구문 설탕이 없으므로 속성 정의는 기본 공용 메서드인 DefineProperty를 통해서만 정의할 수 있습니다.

<2>: 메소드에서 쓰기 가능 항목뿐만 아니라 구성 가능 항목도 봤습니다. 실제로 이는 속성을 삭제하고 업데이트할 수 있는지 여부를 js 엔진에 알려주는 기본 구성입니다. configurable을 false로 설정하면 p.Name을 삭제할 수 없습니다. 이는 잘못된 작업이기 때문입니다.

 

이 글을 읽고 나면 undiffed가 삭제나 업데이트를 할 수 없는 이유를 이해해야 한다고 생각합니다. 그것들은 모두 이상한 표시들로 이루어져 있습니다. 흥미롭지 않나요?

<3>: 다음으로 생각해 볼 만한 질문은 js 엔진이 이를 어떻게 수행하는지입니다. C#에도 Atrribute가 있는데, 이 Atrribute는 컴파일러에서 컴파일된 후 메타데이터에 기록되며 이를 느낄 수 있습니다. Serialized 직렬화 클래스와 같은 Atrribute에서 값을 얻으려면 자유롭게 리플렉션을 사용하세요. 이는 SerializedFormat에 클래스를 반사적으로 읽는 방법, 직렬화할 수 있는 필드와 그렇지 않은 경우 NonSerialized 마크를 사용해야 함을 알려줍니다.

코드 복사 코드는 다음과 같습니다.
[직렬화 가능]
공개수업 테스트
{
         [일련화되지 않음]
          공개 문자열 이름;
}

그림을 보면 이름이 직렬화되지 않은 기능이 IL에 기록되어 있음을 알 수 있습니다. js에는 반영이 없다는 것을 알고 있으므로 획기적인 방법은 당연히 DefineProperty 메소드에 있지만 안타깝게도 기본을 볼 수는 없습니다. 이 메소드의 소스 코드가 정확히 무엇인지 알 수 없으므로 이름 필드에 동적으로 쓸 수 없게 만드는 것이 무엇인지 알 수 없습니다. 이해를 바탕으로 js 엔진의 가능한 동작만 추측할 수 있습니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.