调用方法在javascript中不起作用

时间:2015-01-07 13:14:41

标签: javascript

这下面应该警告“真实”,但是,它警告“没有项目”。我在这个代码上错了。任何线索?

Array.prototype.CheckColor = function (datain) {
    for (var i = 0, len = this.length; i < len; i++) {
        if (this[i] === datain) {
            return true;
        } else {
            return "No item";
        }
    }
}

var newstr = "red blue green".split(" ");
var oyrsval = Array.prototype.CheckColor.call(newstr, "blue");
alert(oyrsval);

5 个答案:

答案 0 :(得分:1)

应该是

Array.prototype.CheckColor = function(datain){
    for (var i = 0, len = this.length; i < len;i++ ){
        if (this[i] === datain){
            return true; // Return true if found
        }
    } 
    return "No item"; // else return
}

使用indexOf简化:

Array.prototype.CheckColor = function(datain){
    return this.indexOf(datain) > -1 ? true : "No item";
}

答案 1 :(得分:0)

您将在for

中返回第一次比较的结果

将您的代码更改为:

for (var i = 0, len = this.length; i < len;i++) {
    if (this[i] === datain) {
        return true;
    }
}

return "No item";

答案 2 :(得分:0)

将您的功能更改为:

Array.prototype.CheckColor = function(datain){

    for (var i = 0, len = this.length; i < len;i++ ){

        if (this[i] === datain) {
            return true;
        }
    }
    // if here, nothing found
    return "No item";
}

答案 3 :(得分:0)

我们已经解释过你的问题是因为你太早回来了。我会提出另一个解决方案,也许更简单:

Array.prototype.CheckColor = function (datain) {
    return this.some(function(el) {
        return datain === el;
    }) || 'No item';
}
在这种情况下,

Array.prototype.some方法很有用。此外,由于您正在扩展原型,因此当您可以直接使用Array.prototype.CheckColor.call(newstr, "blue")时,无需严格执行newstr.CheckColor("blue")

查看演示。

Array.prototype.CheckColor = function (datain) {
    return this.some(function(el) {
        return datain === el;
    }) || 'No item';
}

var found = "red blue green".split(" ").CheckColor("blue");
var notfound = "red blues green".split(" ").CheckColor("blue");
alert(found);
alert(notfound);

最后,如果测试项目是否在数组中是您唯一需要做的事情,那么您可以使用已有的Array.prototype.indexOf方法:

newstr.indexOf("blue") !== -1

答案 4 :(得分:0)

循环数组没什么问题,但你也可以直接在字符串上重新编写:

String.prototype.CheckColor = function(datain) {
    return RegExp("\\b" + datain + "\\b").test(this);
}

在现实世界中,我想你想要在datain内逃避特殊的正则表达式字符。