2014-09-29 63 views
3

我愚蠢地決定在我的最新項目中支持IE8,這無疑將成爲我生命中最愚蠢的想法。IE8中的類未定義

所以我遇到的最基本的問題是我的主類變量是未定義的。我的意思是我有一個原型,看起來有點像這樣一個文件general.js設置:

var generalClass; 

// jQuery Object 
var $ = jQuery; 

$(document).ready(function() { 

    // A general class for a general file. 
    generalClass = function() { 

    } 

    generalClass.prototype = { 

    } 


    new generalClass();  


}); 

所以generalClass變量與我的原型/等填滿。然後我包括這在我的文檔的頭部,後來我在generalClass呼籲函數別的東西,有點像這樣:

<script type="text/javascript" src="general.js"></script> 
<script type="text/javascript"> 
$(document).ready(function() { 
    $.ajax({ 
     type: 'POST', 
     url: ..., 
     data: { 

     }, 
     success : function(data) { 
      // CALL MY FUNCTION:  
      generalClass.prototype.myFunction(); 

     } 


    } 
}); 
</script> 

在每一個瀏覽器,IE9從Chrome瀏覽器工作原理。在IE8中這是行不通的,generalClass是未定義的。它爲什麼這樣對我?

+0

這jQuery的版本是您使用? – 2014-09-29 17:43:25

+1

'new generalClass();'''generalClass.prototype.myFunction();'沒有意義 – epascarello 2014-09-29 17:44:12

+0

是否有其他錯誤發生? IE8基於ECMAScript 3,而您提到的其他瀏覽器遵循ECMAScript 5.您可能會遇到ES5允許的語法錯誤。 – 2014-09-29 17:45:56

回答

3

我不知道你在哪裏瞭解到的模式,但它應該是更多這樣的:

var generalClass; 

// jQuery Object 
//var $ = jQuery; <-- makes no sense $ should be jQuery already 

$(document).ready(function() { 

    function GeneralClass() {} 
    GeneralClass.prototype = { 
     myFunction: function() { 
      alert("x"); 
     } 
    }; 

    generalClass = new GeneralClass(); 

}); 

,當你把它

generalClass.myFunction(); 
+0

好吧,那很好用。我沒有意識到在變量中定義它是必需的。而$ = jQuery只是其他原因出現的剩餘部分。謝謝。 – Johnny 2014-09-29 17:51:19

+0

除了GeneralClass在jQuery ready塊之外不可用,所以不會創建新GeneralClass的任何動態創建,並且您會期望出現錯誤。 – vol7ron 2014-09-29 17:54:04