2012-01-03 3 views
0

초보자 JS 딜레마 :키핑 기능 참조

var a = function() {console.log(5);} 

var b = a; 

a = function() {console.log(6);} 
분명히

b == function() {console.log(5);}

질문은, 그 b는 가리 킵니다 그래서 나는,/포장 원래의 함수에 대한 참조를 유지하여 a을 수정하는 방법 수정 된 것도 역시?

+2

'해결책'을 제안했지만 더 큰 문제가 귀하의 디자인에서 발생한다는 의심이 있습니다. 누군가가 아마이 JavaScript-esque를하는 방법을 지적 할 수 있도록 약간의 문맥을주고 싶을지도 모른다. 나는 새로운 언어를 배울 때마다 붙어있는 많은 시간을 보았지만 언어에 의해 의도 된 것과는 다른 방식으로 물건을 만들고있다. 비록 그것이 완료 되더라도, 그것은 전형적으로 시간 낭비이고 그 언어로 향상시키는 것을 돕지 않습니다. – Nicolas78

+0

Nicolas가 옳습니다. 너 뭐하려고? – SLaks

답변

2

이것은 불가능합니다.
자바 스크립트는 변수에 대한 참조를 지원하지 않습니다.

var b = function() { return a.apply(this, arguments); }이라고 쓸 수 있지만 b은 여전히 ​​다른 개체입니다.

+1

"자바 스크립트는 참조를 지원하지 않습니다." 뭐라고? – MGZero

+1

@MGZero : 자바 스크립트는 C++의'var &b = a; '을 지원하지 않습니다. – SLaks

+0

정말요? 이 시도. 'var a = {x : 1}; var b = a; a.x = 2; 경고 (b.x); –

0

약간 혀 -에 - 뺨,하지만 난 바로 당신을 얻는 경우에 당신이 뭘 하려는지 달성해야

var b = function() { a(); } 
0

이 줄은 :

var a = function() {console.log(5);} 

... 생성 메모리에있는 객체 - 함수 -에 대한 참조를 a에 저장합니다.

마찬가지로,이 라인 : b

b = a; 

... 저장 a에 참조.

그래서, 다음, 당신은이 선이 무엇을 예측할 수 있어야한다 :

a = function() {console.log(6);} 

그것은 a에서 몇 가지 새로운 기능에 대한 참조를 저장합니다. 이것은 b에 전혀 영향을주지 않습니다. 즉, b이 아니며이 아니며 별칭이 인 경우는 a입니다. 우연히 한 번은 a과 같은 메모리 위치를 가리켰다. 그것들은 메모리 내의 임의의 객체를 가리킬 수있는 별개의 독립 변수입니다. 그들은 같은 대상을 가리킬 수 있습니다. 그렇지만 그것이 그 대상과 관련이 있습니다.

0

변수에 새 값을 할당하면 참조가 손실됩니다.

var a = { func: function() { console.log(5); } }; 
var b = a; 
b.func(); // will print 5 to the console 

a.func = function() { console.log(6); }; 
b.func(); // will print 6 to the console 
0

자바 스크립트가 당신에게 포인터를 직접 제어를 제공하지 않습니다,하지만 당신은 결코 a 또는 b을 다시 할당하지하여 해당 해결할 수 있습니다 당신은 그러나 함수 주위에 개체 래퍼를 사용할 수 있습니다. 대신 둘 다 동일한 객체를 가리 키도록 설정 한 다음 객체의 속성을 변경하십시오.

var a = {fn:function() {console.log(5);}}; 
var b = a; 
a.fn = function() {console.log(6);}; 
b.fn(); // logs 6 
+0

그건 사실이 아니야. 모든 변수는 포인터 (또는 오히려 참조)입니다. 그러나 변수의 주소를 가져 오거나 변수에 대한 참조를 만들 수는 없습니다. – SLaks

+0

죄송합니다, 내 말씨 (또는 생각 ...) 조금 안개가났다. 잘하면 지금은 분명해. –