Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/436.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript:映射中未定义自己的函数_Javascript - Fatal编程技术网

javascript:映射中未定义自己的函数

javascript:映射中未定义自己的函数,javascript,Javascript,我得到以下错误ReferenceError:double未定义 代码: 如何修复它?您需要在Number的实例上调用您的方法: ... console.log(x.map(function (n) { return n.double(); })); double是Number prototype的属性,而不是全局变量 x.map(function(y){return y.double()}); 你不能那样做。原因是地图中的这个不是一个数字。这就是为什么不能像您所希望的那样使用原型 您可以执行

我得到以下错误
ReferenceError:double未定义

代码:


如何修复它?

您需要在Number的实例上调用您的方法:

...
console.log(x.map(function (n) { return n.double(); }));
double是Number prototype的属性,而不是全局变量

x.map(function(y){return y.double()});

你不能那样做。原因是
地图中的
这个
不是一个数字。这就是为什么不能像您所希望的那样使用
原型

您可以执行以下操作:从
map

Number.double = function (e){
    return e*2;
}
x=[1,2]
console.log(x.map(Number.double));
编辑:如果您确实需要原型解决方案,可以执行以下操作:

Number.prototype.double = function (e){
    if (e) return e*2;
    else return this*2;
}
x=[1,2]
console.log(x.map(Number.prototype.double));

您确实不应该扩展或修改本机javascript原型(它可能会产生各种意外的副作用),但是
double()
现在不再是
Number
的方法-这完全改变了代码。你不能再说
n.double()
来加倍一个数字。@RichieHindle我不认为它改变了代码,但我也为你的案例添加了解决方案。我实际上认为,如果它只用于这个特定的案例,那么就没有必要把它放在原型中;第一个方法只是添加了一个
静态
方法,而不是
成员
方法。
Number.prototype.double = function (e){
    if (e) return e*2;
    else return this*2;
}
x=[1,2]
console.log(x.map(Number.prototype.double));