2011-06-24 21 views
1

當我運行一個特定的函數時,我總是得到這些奇怪的錯誤,我無法弄清楚。這是設置。沒有定義有沒有方法'地圖'

MyObject.prototype._activate = function() { 
... 
} 

... 

encode = function(data) { 
    var str; 
    str = data.map(function(d) { 
     return String.fromCharCode(d) 
    }).join(""); 
    return btoa(str).replace(/.{76}(?=.)/g, '$&\n'); 
} 

var mystring = encode(somedata); 

的錯誤發生在data.map行,它是這樣的:

未捕獲的類型錯誤:對象的ReferenceError:_activate沒有定義沒有方法「地圖」

。當然,爲MyObject具有與編碼方法完全無關。我在data.map上放置了一個斷點,數據是一個Array。它與MyObject或_activate無關,所以我不知道這是否是Chrome報告錯誤或發生了什麼錯誤。

編輯:更多信息。我也有這個在我的代碼:

var instance = new MyObject(); 

var encoded = encode(somedata); 

instance.load(encoded); 

如果我註釋掉行instance.load(編碼)我沒有收到錯誤。它使我認爲編碼()不會同步發生......

+2

你能提供一個演示問題的http://jsfiddle.net嗎? –

+2

錯誤的讀法就像'somedata'是字符串「Object ReferenceError:_activate is not defined」。 – Nick

回答

0

在JavaScript中,數組和對象通常可以互換,例如,下面應該給予相同的:

alert(a.mem); 
alert(a["mem"]); 

鑑於map函數被調用,我希望data是一個數組概念呢。

Map was impletemented in JavaScript 1.6 and standardised ECMA 5所以我期望browser support for it to be limited(在撰寫本文時)。

這可能是由於這些限制的副作用造成的。

+0

數據是正確的數組,我在調試器中看到它。它是一個很大的圖像,有很多字節的數組。沒有混淆它。 – Matthew

+0

如果我暗示它不是那麼我不是故意的。真的,我只是想指出它可能是瀏覽器不兼容問題。 –

+0

你的第一句話很容易讓人誤解,Array和Object在javascript中是不同的數據類型。你所指的是你可以用來訪問數組內的數據或類似對象的合成器。絕不會使Object和Array可以互換。 – HoLyVieR