0

我有这段代码,还有一点初学者的问题:

function findfruit (food){

var fruitvalues = ["apple", "orange", "banana", "mango", "kiwi", "watermelon"];
if (fruitsvalues.indexOf(food) != -1){
    return true;
    }
else {
    return false;
    }
    }


var food = prompt("Write down any food you like");
findfruit(food) // returns always the correct answer, true or false

所以事情是这样的:这很好用,没有问题,但如果我这样做:

String.prototype.fruit = findfruit;

然后我试着做

if (food.fruit != true) {
    alert("your food is not a fruit");
    }
else {
    alert("your food is a fruit");

它不起作用,并且总是导致“错误”。我怀疑我的问题是,当我调用时food.fruit,函数findfruit启动时没有使用我刚刚创建的字符串变量food,但我不明白为什么。我只是在阅读关于如何使用的教程prototype,我找不到任何错误(尽管我确定有什么问题)。

我将不胜感激任何帮助。我知道这一定很容易,但是我在这里找到的关于原型的其他问题无济于事。

谢谢!

4

2 回答 2

1

1) 写作food.fruit不是函数调用。它只会返回函数本身(显然不能等于 true)。

2)您可以访问从中调用函数的对象作为this。它不会作为参数传递给您的函数(这不是 Python)。正确的实现是

String.prototype.fruit = function() {
   var fruitvalues = ["apple", "orange", "banana"];
   return (fruitvalues.indexOf(this.toString()) != -1);
}

3) 不鼓励将这样的函数添加到内置类型的原型中。这很诱人,但您必须问自己:“这是否足够通用,以至于我在程序中的任何地方都需要它?”。

于 2012-11-01T14:01:01.887 回答
0

如果您只是使用它来引用字符串,您实际上将被限定为该函数。this.valueOf 将查看父对象(字符串)。

String.prototype.fruit = function () {
var fruitvalues = ["apple", "orange", "banana", "mango", "kiwi", "watermelon"];
if (fruitvalues.indexOf(this.valueOf()) != -1){
    return true;
}
else {
    return false;
}
}

var food = 'apple';

if (food.fruit() != true) {
    console.log("your food is not a fruit");
}
else {
    console.log("your food is a fruit");
}
于 2012-11-01T14:06:19.850 回答