나는 "엄격한 사용"을 적용하고 SO post에서 가져온 John Resig의 간단한 OOP Class
을 사용하고 있습니다. 모든 예에서
나는과 같이 Class.extend
의 사용을 참조하십시오간략한 JavaScript OOP 클래스
var MyObj = Class.extend({
init:function(){},
prop: "Property"
});
하지만 그런 방법으로 그것을 사용하는 나를 위해 큰 단점을 발견 - 나는 "개인"변수를 가질 수 없습니다, 그래서 매장 기준으로 할 수 없습니다 this
은 var $this = this;
입니다. 내 경우에 대한 해결책을 발견, 지금은 다음과 같은 방법으로 Class.extend
를 사용 : 내 경우에는 작동
var MyObj = Class.extend(new function(){
var $this = this;
this.init = function(){};
this.prop = "Property";
});
다,하지만 난 알고 싶은 경우 장기적으로 나에게 문제가 발생할 수 있습니다 몇 가지 ?
내 응용 프로그램이 브라우저에서 더 많은 메모리를 소비하게됩니까?
내 요구 사항을 구현하기 위해 어떤 대안을 사용할 수 있습니까?
주 : 나는 주로 이벤트와 콜백을 사용하기 때문에 나는 $이를 저장해야하는, 그래서 난 "원래"참조 할 this
개체의 모든 메서드와 속성에 액세스하기 쉬운.
편집는 :
(function() {
"use strict";
window.QuickPlay = Class.extend(new function() {
var $this = this;
this.init = function (initData) {
$this.elementsToHide.push(initData.el);
$(function() {
playProcessStart();
Sys.Application.add_load(function() {
$find("ctl00_ContentPlaceHolderMain_ctrlPlayPopup1").add_closed(function() { $this.setElementsVisibility(""); });
});
$this.setElementsVisibility("hidden");
});
};
this.elementsToHide = [];
this.setElementsVisibility = function (visibility) {
$.each($this.elementsToHide, function (i) {
$("#" + this).css("visibility", visibility);
});
};
});
}());
아뇨, 아니요. 나는 이것이 정말로 당신을 위해 일한다고 믿을 수 없습니다. 이 "클래스"를 이벤트 및 콜백과 함께 사용하는 방법을 알려주십시오. 아마도 실제 코드를 게시 할 것입니다 (적어도'this this '를 포함하는 메소드는 적어도). – Bergi
@Bergi @Bergi 예제를 추가했습니다.이 코드는 이미 QA 무대를 통과했습니다. –
모든 객체 내부에서 현재 객체를 인식하는'this'에 액세스 할 수 있어야합니다. – travis