결과는 Z로, 콘솔 출력 예시는 다음과 같습니다.
滿天的星座2017-05-19 10:42:23
사실 이유는 매우 간단합니다. 문제는 for 루프에 있습니다
으아악여기서 마지막 키 === 'z'이고 다른 속성의 결과는 params['z']인 params[key]를 반환합니다
给我你的怀抱2017-05-19 10:42:23
이것은 객체 복사 함수입니다. 원본 객체와의 유일한 차이점은 클로저로 인해 복사된 객체 a의 속성을 탐색할 수 없다는 것입니다. get 함수가 호출하는 키는 모두
a입니다. = {
}
阿神2017-05-19 10:42:23
으아악
여기서, Object.defineProperty(this, key, {})
여기서 key
를 읽고 즉시 사용하므로 예상되는 동작입니다x,y, z
Object.defineProperty(this, key, {})
这里的key
是立即读取使用的,所以是预期行为x,y,z
Object.defineProperty(this, key, {
get : function() {
return params[key]
},
enumerable : false
});
这个函数是未来的一个时间点执行的,所以运行的时候读取的是最后的key
值,即z
으아악
키
값인 z
를 읽어옵니다. 이것은 고전적인 폐쇄 문제와 동일합니다. 으아악
인쇄된 모든 것은 5입니다. 🎜