0

나는 다중 "페이지"phonegap 응용 프로그램을 가지고 있으며 코드를 제대로 작성하려고하므로 아래의 객체에 전체 2 페이지 코드를 캡슐화했습니다. 하지만 populateDB, errorCBsuccessCBpage2_Obj의 메서드로 사용하면 saveData에서 찾을 수 없습니다. 이러한 함수를 saveData 자체의 멤버로두면 모든 것이 잘 수행됩니다. 그래서 내 이유는 다음과 같습니다.

1. 왜 saveData는 형제를 볼 수 없습니까?
2. 이러한 함수를 saveData의 멤버로 두는 것이 옳은가요? 아니면이 작업을 수행하는 더 좋은 방법이 있습니까?
3. saveData의 멤버로 해당 함수를 두어 메모리가 누출 되었습니까?객체의 메소드에 addEventListener

function page2_Obj() { 
    this.bindEvents = function() { 
     var obj = document.getElementById('savebtn'); 
     obj.addEventListener('click', this.saveData, false); 

    this.unbindEvents = function() { /* blah */ } 

    this.populateDB = function(tx) { 
     /* blah */ 
    } 

    this.errorCB = function(err) { 
     alert("Error: "+err.code+ ' '+err.message); 
    } 

    this.successCB = function() { 
     alert("success!"); 
    } 

    this.saveData = function(){ 
     var db = window.openDatabase("Database", "1.0", "PhoneGap Demo", 200000); 
     db.transaction(this.populateDB, this.errorCB, this.successCB); 
    } 
} 

감사

+0

이 this.' 각 기능에'사용의 목적은 무엇인가 – frank

+0

나는'이와 기능을 선언하고있어 그래서 그들은 그것들에 접근하기 위해 page2_Obj와 _trying_의 메소드가된다. saveData with'this' – user3702014

+0

당신은'save' 메쏘드를 넘겨주고 있습니다 만, 원래 그것을 참조했던'this'에 대한 참조를 유지하지 않습니다. –

답변

0

신속하게 질문에 대답하려면 : 1. 정지는 글로벌 오브젝트, 나쁜 생각에 당신의 방법을 결합, 본을 사용. 2. 모듈 패턴을 더 좋은 방법으로보아야한다고 생각합니다 (내 대답 끝) 3. 나는 그렇게 생각하지 않습니다.

나는 당신의 문제가 "this"의 사용으로 인한 것이라고 생각하지만, 당신이 무엇을 하려는지 확실하지 않습니다.

Page2_Obj를 생성자로 사용하고 있습니까? , 당신은 나쁜 생각을하는 전역 객체에 대한 모든 내부 방법을 결합하고 그렇지 않은 경우

var pagex = new Page2_obj(); 

나는이 당신이 무엇을 원하는 의심

: (즉, 같은 인스턴스를 생성.. ? 당신은 당신이 캡슐의 경우 달성하려고하는 무엇인지 설명 할 수는 다음 인생이 더 적합 :

var Page2_obj = (function() { 
     // some private data 
     var a = 'private string'; 

     // create some private methods 
     function imPrivate() { 
     // do something 
     } 

     // reveal public API (methods) 
     return { 
     imPrivate: imPrivate; 
     }; 
    }()); 
+0

네, 생성자로서 각 페이지를로드 할 때'window [id] = new window [controller]();와 같은 함수를 실행합니다; window [id] .bindEvents();'. 캡슐화로 인해 전역 객체가 어수선하게 흩어지는 것을 막으려 고합니다. 따라서 두 페이지에 'errorCB'라는 두 개의 별개의 함수가 있으면 올바른 코드가 호출됩니다. IIFE가이 문제에 어떻게 도움이 될까요? – user3702014

관련 문제