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

0x4*_*2D2 1 javascript

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

代码是否正确?

pok*_*oke 6

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

您可以像下面这样运行它:

String.prototype.parse.apply(a, ["Hello"]);
Run Code Online (Sandbox Code Playgroud)

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

a.parse("Hello");
Run Code Online (Sandbox Code Playgroud)

编辑:

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

String.prototype.parse = function(f) {
    return this.replace(f, "");
};
Run Code Online (Sandbox Code Playgroud)

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

alert(a.parse("Hello"));
Run Code Online (Sandbox Code Playgroud)