2011-05-10 5 views
5

jquery를 사용하는 객체에 약간의 문제가 있습니다. jquery가이 포인터를 덮어 쓰기 때문에이 포인터를 변수에 저장하지 않고 하위 메서드를 호출 할 수 없습니다.이 방법이 선호되는 방법입니까 아니면 더 좋은 솔루션입니까? 이 포인터를 객체에 저장하는 방법이 있나요? (다른 이름을 가진 클래스 메쏘드처럼)?jquery를 사용할 때 javascript 내부 메소드가 호출됩니다.

자바 스크립트로 자바 스크립트를 배우려고 노력했지만 좋은 부분은 있지만 아직 모든 단점을 이해하고 있다고 생각하지는 않습니다. :).

//from javscript the good parts 
if (typeof Object.create !== 'function') { 
    Object.create = function (o) { 
     var F = function() {}; 
     F.prototype = o; 
     return new F(); 
    }; 
} 

var Tester = { 
    printData: function (text) { 
     console.log(text) 
    }, 
    start: function() { 
     var that = this; 
     jQuery('id').click(function() { 
      that.printData('firstColumn') 
    }); 
    } 
}; 

var test = Object.create(Tester) 

test.start() 

안부 앤더스 Olme 이는 일반적으로 Overwritten "this" variable problem or how to call a member function?

+0

Firefox 4를 사용하고 있습니까? 'Object.create'는 매우 새롭고 FF4 AFAIK에서만 지원됩니다. – RoToRa

+0

더 나은 해결책이 없다고 생각합니다. 'var that = this'는 –

+0

과 같은 문제를 해결하는 고전적인 방법입니다. 객체를 javscript에서 좋은 코드를 만들어 다른 곳에 포함 시켰습니다. – Buzzzz

답변

1

에 비슷한 것 같다, 그래, 그건 당신이해야 할 일이다.

이 특별한 경우에 jQuery는 몇 가지 도움을줍니다.

jQuery('id') // <-- should be #id ? 
    .bind('click', { myThing : this }, function (e) { 
     e.data.myThing.printData('firstColumn'); 
    }) 
; 

docs for bind()을 참조하십시오. 내부적으로, jQuery는 당신이하는 것과 똑같은 일을하므로 성능면에서 큰 차이는 없지만 코드를 좀 더 관리하기 쉽게 만들 수 있습니다.

+0

괜찮아 보이는 것입니다.이 ID는 실제 코드에서 훨씬 자세한 선택자입니다.하지만 예제가 더 좋을 것 같아요. ~ #id. – Buzzzz

관련 문제