객체의 속성 설명자

1993 단어
ES5에서 시작하여 객체의 각 속성에는 속성 설명자가 있습니다.
u상에 대한 속성 묘사 부호는 정말 흔한 것이니, 여기서 간략하게 요약해 봅시다.객체의 속성 설명자는 다음과 같습니다.
  • [[value]]
  • [[writable]]
  • [[configurable]]: 속성 설명자를 다시 수정할 수 있는지 여부와 이 속성을 delete할 수 있는지 여부
  • [[enumerable]]
  • [[get]]
  • [[set]]

  • 속성 설명자에는 다음과 같은 방법이 자주 사용됩니다.
  • Object.defineProperty(obj::object,key::string, propertyObj::object)
  • Object.getOwnPropertyDescriptor(obj::object, key::string)
  • Object.freeze(obj::object)

  • 다음은 예를 들어 토론할 수 있다.
    var obj = {"num1": 1, "num2": 2}
    Object.freeze(obj)// , ,configurable false,enumerable true
    obj.num1 = "one"// , 
    console.log(Object.getOwnPropertyDescriptor(obj, "num1"))
    //{"value":1,"writable":false,"configurable":false,"enumerable":true}
    

    다시 한 번 예를 들다.
    var obj = {"num1": 1, "num2": 2}
    Object.defineProperty(obj, "num1", {
      "value": 2,
      "writable": false,
      "configurable": false,
      "enumerable": true
    })
    obj.num1 = "one"//do not work
    

    2. 속성 설명자에 있는 액세서리 속성 [[get]과 [[set]에 대해 액세서리 속성 [[get]과 [[set]은 대상의 속성에 별명을 붙이는 것과 같다. 별명이 아니라면 무한 순환을 일으키지 않겠는가?또 하나 주의해야 할 것은 get만 설정하면 이 별명 속성의 값이 바뀌지 않고 쓰기를 시도하면 아무런 효과가 없다는 것이다.set만 설정하면, 엄격하지 않은 모드에서 읽으면 undefined로 되돌아옵니다.다음과 같은 몇 가지 예를 들 수 있습니다.
    var obj = {"_name": "yow"}
    Object.defineProperty(obj, "name", {
      "get": function(){return this._name;}
    })
    console.log(obj.name)//"yow"
    obj.name = "ahaha"
    console.log(obj.name)//"yow"
    

    set만 설정한 예를 보십시오:
    var obj = {"_name": "yow"}
    Object.defineProperty(obj, "name", {
      "set": function(newName){this._name = newName}
    })
    obj.name = "ahaha"
    console.log(obj.name)//undefined
    console.log(obj._name)//"ahaha"
    

    END

    좋은 웹페이지 즐겨찾기