>source

함수 이름속성을 구성할 수 있고 재정의할 수 있지만 시도하면

function foo() {}
Object.defineProperty(foo, 'name', {value: 'bar'})

foo.toString()여전히 다음과 같이 나타납니다."함수 foo() {}"그러나 나는 그것이 될 것으로 예상했다"함수 막대() {}".

함수 개체의 "이름" 속성은 업데이트할 수 없습니다.

Pointy2021-10-04 15:51:01

.toString()의 출력을 변경하려는 이유는 무엇입니까?

Andreas2021-10-04 15:52:47

@Pointy -업데이트(할당)할 수 없지만 OP가 말했듯이 defineProperty로 재정의할 수 있습니다. 그러나 그렇다고 해서 Function.prototype.toString이 반환하는 문자열은 변경되지 않습니다.

T.J. Crowder2021-10-04 15:53:41

@T.J.크라우더 정말? MDN은 그것을 "읽기 전용"이라고 설명하지만 그것이 MDN입니다.

Pointy2021-10-04 15:54:23
  • 답변 # 1

    이 작업을 100% 안정적으로 수행할 수는 없습니다. 의 정의 때문이다.Function.prototype.toString, [[SourceText]] 내부 슬롯을 사용하며, 함수를 생성하는 데 사용된 소스 code에서 함수가 생성됩니다. 그것은 사용하지 않습니다이름재산.

    재정의를 시도할 수 있습니다.toString함수에서도 마찬가지지만 누군가 명시적으로 사용하면 여전히 실패할 것입니다.Function.prototype.toString그 위에.

  • 이전 Android 리소스 ID가 갑자기 최종적이지 않음, switch()가 손상됨
  • 다음 python : googletest와 같은 pytest 출력을 만드시겠습니까?