Estranho js bug variedade atribuir no IE8
-
05-07-2019 - |
Pergunta
Este código provoca um estranho bug no IE8. Ela vem de MicrosoftAjaxAdoNet.js em link de texto
function Sys$Data$_AdoNetBatchWriter$startChangeSet() {
this._changesetBoundary = "changeset_" + this._createBoundary();
this._changesetEntries = [];
}
Antes de chamar esta função, this._changesetEntries é sempre nulo. Eu esperava his._changesetEntries vai se tornar um array vazio após esta função é chamada. Foi o que aconteceu como esperado no Chrome, Firefox, IE8. Nem sempre é verdade no IE8, descobri que, por vezes, esta função criar um método " indexOf (v, n) " em vez de array vazio.
Este comportamento estranho causa outro erro observado aqui texto do link
EDIT: Eu posso isolar esta questão do meu código agora, este problema ocorre quando eu usar um plug-in jQuery olho de peixe. Neste plug-in, há algo como
[].indexOf || (Array.prototype.indexOf = function (v, n) {
n = (n == null) ? 0 : n;
var m = this.length;
for (var i = n; i < m; i++)
if (this[i] == v) return i;
return -1;
})
Esta é uma causa deste problema.
Solução
O 'às vezes' na sua pergunta é a chave aqui: sob que condições this._changesetEntries
ter uma função em vez de uma matriz vazia? Algumas cargas página? algumas chamadas para o DataService? Depois de ter um testcase, o answe pode tornar-se mais evidente.
Outras dicas
Você poderia postar como você está usando isso? Tudo o que podemos fazer até lá é especular:
Isto parece um construtor. Você está usando você instanciar usando new Sys$Data$_AdoNetBatchWriter$startChangeSet()
?