기능 재검토(프로토타입 아님) 🤥

빠른 수정을 위한 몇 가지 참고 사항

사용자 지정 속성이 있는 함수




function aFunction() {
  this.someKey = "someValue";
}
aFunction.customKey = "customValue"


이것은 대부분의 경우 런타임 바인딩이므로 someKey는 aFunction 또는 aFunction.prototype의 속성이 아닙니다.



접두사 custom은 이름, 호출자 등과 같은 함수에 있는 기본 속성과 구별하기 위해 선택되었습니다.
이 문서에서는 customKey 및 customValue 쌍을 사용자 지정 속성이라고 합니다.



생성자는 함수이기 때문에 프로토타입도 있고 재귀는 영원히 계속됩니다. [[Prototype]] 속성은 개체의 실제 복사본이 아니라 링크일 뿐임을 기억하십시오.

사용자 지정 속성은 생성자에서 사용할 수 있지만 프로토타입에서는 사용할 수 없습니다.

사례




let aInstance = new aFunction()
console.log(aInstance)




aInstance의 [[Prototype]]이 aFunction.prototype이기 때문에 aFunction의 커스텀 속성은 aInstance의 [[Prototype]]에 존재하지 않습니다.

원기


  • 함수의 프로토타입 속성에 대해 이야기할 때를 제외하고 프로토타입이라고 하면 항상 내부 속성 [[프로토타입]]을 의미합니다.
  • 내부 속성 [[프로토타입]]은 일부 속성에 대한 링크를 나타내며 해당 속성의 복사본이 아닙니다
  • .
  • 모든 프로토타입(Object.getPrototypeOf()를 사용하여 액세스)에는 생성자 속성과 [[Prototype]] 속성이 있습니다.
  • aInstance의 [[Prototype]]이 aFunction.prototype의 값이므로 aInstance의 [[Prototype]]을 aFunction.prototype이라고 합니다.
  • 마찬가지로 aFunction의 [[Prototype]]을 Object.prototype이라고 합니다
  • .

    맞춤 속성


  • 사용자 정의 속성은 일반적인 개체 속성(Object.create, Object.assign, Object.getPrototypeOf 등)과 같습니다. 이러한 속성은 개체 인스턴스에서 호출하기 위한 것이 아닙니다.
  • 반대로 맵, 슬라이스, 푸시 등과 같은 일반적인 배열 속성은 부모 배열 객체가 아닌 인스턴스와 함께 사용하기 위한 것이므로 배열 인스턴스의 [[Prototype]]에서 찾을 수 있습니다
  • .

    생성자 속성



    인스턴스의 생성자 속성은 aInstance.constructor = 를 사용하여 변경할 수 있고 부모의 생성자 속성은 Object.getPrototypeOf(aInstance).constructor 를 사용하여 변경할 수 있습니다. 따라서 인스턴스의 생성자를 확인하는 대신 instanceof 연산자를 사용하십시오.

    좋은 웹페이지 즐겨찾기