객체

2013-02-13 1 views
0

toplevelOBJ 객체는 예로서, 예를 들어 특성을 I에의 액세스 권한 this.toplevelOBJ 같은 애플리케이션 전반에 걸쳐 사용된다객체

  • 기초 this.toplevelOBJ.mapArea.coordX.
  • ClassB에는 외부 소스의 신호를 기다리는 blink이라는 기능이 있습니다. ClassC에서
  • 는 I는 신호를 캡처 할 필요 그래서 ClassCcapture() 기능을 통해 전송하면 ClassB

문제

의해 전송 된 신호를 검색 ClassC의 함수 capture 설정 "this" in this.toplevelOBJ은 더 이상 toplevelOBJ을 나타내지 만 ClassC을 나타냅니다. 이 때문에

, 나는 capture() 기능을 통해 매개 변수 toplevelthis.toplevelOBJ을 보냈지 만 수신에, 나는 toplevelOBJ에서 함수가 호출되는 경우 확실하지 않다 : toplevel.mapArea.coordX

: 나는 그것의 속성에 액세스 할 수있는 반면, toplevel.update()

질문

매개 변수로 Object 통한 송신 정확히 동일한 Object입니까? 내가 찾은 반면 나는 Object을 검사 할 때 때문에, 나는 toplevel.__proto__.__proto__ 아래 update() 기능을 발견 즉시 해당 속성 : toplevel.mapArea


코드

// Class in which I am sending the object 
var ClassB = exports.ClassB = ClassA.extend({ 
    blink: function(key, value) { 
     ClassC.prototype.capture(key, value, this.toplevelOBJ); 
    } 
}); 

// Class in which I am receiving the object 
var ClassC = exports.ClassC = ClassA.extend({ 
    capture: function(key, value, toplevel) { 
     /* Run Function of toplevel */ 
    } 
}); 
+2

'this'의 값은 모든 함수 호출의 상황에 따라 결정됩니다. 나에게 그것은 당신의 전체 질문을 매우 혼란스럽게 만든다. 나에게 "최상위 오브젝트"는 "전역 오브젝트"를 의미하며,이 경우에는 "this"를 통해 액세스 할 필요가 없습니다. – Pointy

답변

0

가장을 이것이 수업에서 다루어지는 일반적인 방법은 적절한 때 this을 t에 저장하는 것입니다. 인스턴스화의 ime. 이 일의 가장 일반적인 방법은 같은 것입니다 :

function SomeClass 
{ 
var that = this; 
that.myVariable = 5; 

that.someFunction = function() 
{ 
    return that.myVariable; 
} 
} 

당신은 또한 밑줄 라이브러리에서 bind 기능을 할 수있는 '힘'을 this 변수에 의해 설명 된 바와 같이 래퍼/프록시 방법을 가지고있다. 내가 호출자에 의해 this 변수를 강제 을 통해이 두 가지 방법을 선호 http://underscorejs.org/#bind

참조하십시오.

0

예, 개체를 매개 변수로 전달하면 정확하게 동일합니다.

개체의 정확한 복사가 아니기 때문에 실제로는 같은 개체입니다. 매개 변수는 객체에 대한 참조 일 뿐이므로 객체는 복사되지 않습니다.


속성 및 메서드는 개체 자체의 멤버이거나 프로토 타입 체인의 멤버 일 수 있습니다. 귀하의 경우 mapArea 속성은 개체 자체의 구성원이고 update 메서드는 프로토 타입의 멤버이거나 toplevelOBJ 개체의 프로토 타입 인 개체입니다.