数组原型在chrome扩展中工作,但在firefox中提供TypeError

时间:2013-07-11 16:25:07

标签: javascript google-chrome firefox-addon-sdk

我在stackoverflow上找到了这个有用的代码片段:

Array.prototype.clean = function(deleteValue) {
    for (var i = 0; i < this.length; i++) {
        if (this[i] == deleteValue) {         
            this.splice(i, 1);
            i--;
        }
    }
    return this;
};

我用它从我目前移植到firefox的chrome扩展中的数组中删除空值。我用的是这样的:

foobar = foo.concat(bar).clean('').toString();

哪个在chrome中运行正常,但在firefox中我得到一个TypeError:

TypeError: foo.concat(...).clean is not a function

有什么建议可能是什么问题?

// // EDIT

foo和bar是数组,foo来自json,它被解析如下:

var json = {property: 'a,b,c,d,e,f,g'};
json = json.property.split(',');

和来自textarea的bar,它被解析如下:

function digestTextField (string) {
    // takes string of format "a, b , c", trims spaces, converts to lower case
    var rawText = document.getElementById(string + 'Events').value,
        digestedText = rawText.split(','),
        i;

    for (i = 0; i < digestedText.length; i += 1) {
        digestedText[i] = digestedText[i].toLowerCase()
                            .replace(/^\s\s*/, '').replace(/\s\s*$/, '');
    }
    return digestedText;
}

然后在调用.clean('')之前将两者保存到simpleStorage并从中读取。

1 个答案:

答案 0 :(得分:0)

发布的代码没有问题,也许你在调用后添加了clean原型?以下适用于xul应用程序:

function jsdump(str) {
  Components.classes['@mozilla.org/consoleservice;1']
            .getService(Components.interfaces.nsIConsoleService)
            .logStringMessage(str);
}
Array.prototype.clean = function(deleteValue) {
    for (var i = 0; i < this.length; i++) {
        if (this[i] == deleteValue) {         
            this.splice(i, 1);
            i--;
        }
    }
    return this;
};
var foo = {property: 'a,b'};
foo = foo.property.split(',');
var bar="5,6,,7,".split(",");

jsdump("Array has clean:"+Array.prototype.hasOwnProperty("clean"));
jsdump("is foo an array:"+(foo instanceof Array));
jsdump("is bar an array:"+(bar instanceof Array));
jsdump(foo.concat(bar).clean('').toString());

在默认值\ preferences \ prefs.js中:

pref("browser.dom.window.dump.enabled", true);
pref("javascript.options.showInConsole", true);
pref("javascript.options.strict", true);
pref("nglayout.debug.disable_xul_cache", true);
pref("nglayout.debug.disable_xul_fastload", true);

使用以下命令启动应用程序:

firefox --app application.ini -jsconsole