2012-01-09 8 views
1
var plugin = { 
    Init: function() { 
     this.UpdateUI(); 
     if (this.Status() == 1) { 
      ... 
     } else { 
      ... 
     } 
    }, 
    Status: function() { 
     ... 
    }, 
    UpdateUI: function() { 
     ... 
    } 
} 

이것은 기본 코드입니다. 초기화가 호출 될 때 문제는, 다음과 같은 오류가 표시됩니다 :개체 함수가 함수가 아닙니다.

this.UpdateUI is not a function 
this.Status is not a function 

누군가 내 코드와 문제 무엇을 말해 줄 수 있습니까?

+2

'Init()'을 호출하는 코드를 게시 할 수 있습니까? –

+0

범위 지정 문제는 'this'가 플러그인을 참조하지 않고 init 함수를 참조합니다. Status 함수와 UpdateUI 함수를 init 함수 내에두면 코드가 올바르게 작동합니다. 나는 바디 어가 당신을위한 올바른 해결책을 가지고 있다고 생각합니다. –

+0

나는 우리가 방금 자바 스크립트의 추악한 부분 중 하나를 발견했다고 생각하고 내 대답에 대한 투표에 따르면 이것에 대한 몇 가지 다른 견해가있는 것으로 보인다 : D – bardiir

답변

2

plugin.Init 안에있는 thisplugin.Init을 말하며 plugin이 아닙니다. 이런 식으로 변경 :

var plugin = { 
    Init: function() { 
     plugin.UpdateUI(); 
     if (plugin.Status() == 1) { 
      ... 
     } else { 
      ... 
     } 
    }, 
    Status: function() { 
     ... 
    }, 
    UpdateUI: function() { 
     ... 
    } 
} 

프로토 타입을 :

function Plugin(){ 
    var self = this; 

    this.Init = function() { 
    self.UpdateUI(); 
    if (self.Status() == 1) { 
     ... 
    } else { 
     ... 
    } 
    }; 
} 

Plugin.prototype.status = function() { 
      ... 
    }; 
Plugin.prototype.UpdateUI: function() { 
    ... 
    } 

var plugin = new Plugin(); 
+1

'this'가 함수 본문에 침투하지 않는 이유는 무엇입니까? 이게 가능하다고 확신합니까? – bardiir

+0

맞아요, 그 같은 잘못된 코드입니다. 'self'를'plugin'으로 바꿔야합니다. – jAndy

+0

이것은 왜 코드와 다른 점이 있습니까? –

2

을 초기화이 다른 것을 수 있습니다 호출되는 상황에서.

plugin.UpdateUIplugin.Status 대신 항상 올바른 기능을 참조하십시오.