为什么这个函数返回为undefined?

时间:2011-03-19 17:03:23

标签: javascript

String.prototype.parse = function(f) {
    alert(this.replace(f, ""));
};
var a = "Hello World";
parse.apply(a, ["Hello"]);

代码是否正确?

2 个答案:

答案 0 :(得分:6)

不,那不对。该函数定义为String.prototype.parse,因此它不可用parse(事实上,parse未定义)。

您可以像以下一样运行它:

String.prototype.parse.apply(a, ["Hello"]);

但实际上,将函数添加到String原型的原因是您使用该函数扩展String对象。所以你实际上应该运行这样的函数:

a.parse("Hello");

编辑:

哦,并回答你的问题标题“为什么这个函数返回为未定义?”:该函数不返回任何内容,因为你没有告诉函数返回任何东西。例如,你可以像这样定义它来返回被替换的字符串(而不是警告它):

String.prototype.parse = function(f) {
    return this.replace(f, "");
};

然后你可以提醒函数的返回值:

alert(a.parse("Hello"));

答案 1 :(得分:0)

您的代码示例中没有定义此类变量parse。如果你以后真的想要apply这个功能,你应该这样做:

// Capture function as a local variable first
var parse = function(f) { alert(this.replace(f, "")); };
String.prototype.parse = parse;