2013-03-05 1 views
7

개체의 키로 자바 스크립트 기능을 사용하는 것이 완전히 유효합니까?자바 스크립트 기능을 객체의 키로 사용하는 것이 완전히 유효합니까?

다음 작품,하지만 난 모르겠어요 그것의 100 % (ECMA 또는 무엇이든 몸이에 적용)을 준수

var f = function(){ 

}; 

var obj = {}; 

obj[f] = "a"; 


console.log(obj[f]); 
+3

실용 사례를 보려면 매우 궁금합니다. –

+0

나는 그것이 일종의 무의미하다고 말하고 싶습니다. 이 함수는 toString을 사용하여'[ "function() {...}"]' – mplungjan

+1

키를 생성하여 pub/sub-system에서 익명 가입자 함수를 추적/등록 해제합니다. 그래도 이것이 작업에 적합한 데이터 구조라고 확신하지는 못합니다. –

답변

1

객체 키부터 그렇게 제로 이유가있다 ECMAscript의 경우 문자열 일 수 있습니다 (당분간 ECMAscript 262 Edition 3 및 5에서는 사양 별). 우리는 또한 객체 (내가 함수 참조에 대해 확실하지 않다)이 될 수WeakMaps객체 키가 어디에

것들, ECMA 스크립트 6에 그러나 변경됩니다.

브라우저가 객체 키를 기능 구별로 구별 할 수 있다고하더라도, 분명히 의심스러운 동작이며 실험적 일 가능성이 높으며 지금 당장 사용하면 안됩니다.

7

작동하는 것처럼 보이지만 예상대로 작동하지 않을 수 있습니다.

var f = function(a) { return a; }; 
var obj = {}; 
obj[f] = 'abc'; 
console.log(JSON.stringify(obj)); 
//"{"function (a) { return a; }":"abc"}" 
console.log(f.toString()); 
//"function (a) { return a; }" 
var f2 = function (a) { return a; }; 
console.log(obj[f2]); 
//"abc" 

그래서, F, F2 함수와 다른 개체이지만 열을 주조 할 때 동일하다 :

함수는 키로서 사용될 때 열을 주조한다.

+1

'f'와'f2'가 기본 코드가 동일하기 때문에 동일하게 동작한다면 종종 문제가되지 않습니다. –

+2

클로저 인 경우 일 수 있습니다. 그것들은 같은 소스 코드를 가질 수 있고, 같은 외부 함수에 의해 생성 될 수 있지만, 클로저의 다른 값에 바인딩됩니다. 그래서 그들은 ** 다르게 행동 할 것이지만 똑같이 보입니다. – SWilk

1
var f = function(){ 

}; 
var obj = {}; 
obj[f] = "a"; 
console.log(obj['function(){\r\n\r\n}']); 
관련 문제