함수에서 국부 변수 대상의 모든 키 값을 가져올까요?
4639 단어 면접 문제
제목.
다음 코드를 바꾸지 않은 상황에서 함수
fn
의 국부 변수obj
의 모든 키 값을 어떻게 얻습니까?function fn (key) {
const obj = { a: 1, b: 2, /* other props */ }
return obj[key];
}
분석하다.
이를 통해 알 수 있듯이obj는 특정한 키를 호출하여 그 값을 얻고,this 상하문의 원리에 따라obj를 통해 특정한 함수를 호출하면,this는obj의 대상을 직접 획득하고
Object.keys(this)
obj의 모든 키 값을 얻을 수 있다.제목에서 키만 통해 이 속성의 값을 얻을 뿐 함수를 호출하지 않았다.그러면 여기에는
Object.defineProperty
를 통해obj의 어떤 속성을 납치한 get을 생각해야 한다. 그리고return Object.keys(this)
는 다음과 같다.var obj = {a: 1, b: 2};
Object.defineProperty(obj, 'somekey', {
get () { return Object.keys(this) }
});
obj.somekey // ['a', 'b']
그러나 제목의 요구에 따라 우리가obj를 직접 납치할 수 있다면 여기에는 원형 체인의 원리를 이용해야 한다.obj에
'somekey'
가 없다고 가정하면 원형 체인에서 이 속성을 찾습니다. 즉Object.prototype
에서 이 속성을 찾습니다.그럼 우리는 직접 납치Object.prototype
상'somekey'
을 할 수 있다.문제는 이것
'somekey'
이 obj에 존재하지 않는다는 것을 어떻게 보증하는가?-Symbol
! 해답하다
let key = Symbol();
Object.defineProperty(Object.prototype, key, {
get () { return Object.keys(this) }
});
fn(key); // ['a', 'b', /* other props */]
외국 편
물론 함수 내용의 문자열을
fn.toString
를 통해 얻은 다음 정규를 통해 일치하는 소작업도 있다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Java 프로그래머 면접에서의 다중 스레드 문제 요약wait ()/notify ()/notify All () 의 모든 방법을 호출할 때, 현재 라인이 이 대상의 자물쇠를 얻지 못하면, Illegal MonitorState Exception의 이상을 던집니다. Thre...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.