JavaScript中的“点函数”操作符

我是js的新手,所以请对我温柔:)

我想知道我们在哪里可以使用某个变量的点运算符(在这种情况下是一个数组),什么时候我们不能。 考虑下面的代码:

//example 1
function f1(x) {
    return x*x;
}
console.log(map(f1, [1,2,3,4,5]));
console.log([1,2,3,4,5].map(f1));

//example 2
function f2(arr) {
    return arr;
}
console.log(f2([1,2,3,4,5]));
console.log([1,2,3,4,5].f2());

我知道这些例子是相当不同的,但仍然 - 在例1中,即使使用array.function(..)语法也能打印作品(并且打印相同) - 而在例2中,第二次打印会产生错误。 基本上,这两者之间的区别是什么,为什么它仅在示例1中起作用?

一般来说 - 我可以将这种方法应用于不同的变量类型(数字,布尔值等)吗?


在第一个例子中,您正在使用Array.prototype.map()函数。

这个函数可以用两种不同的方式调用(参见文档)

[1,2,3].map(function(x){ ... }): //In your case the callback function is *f1()*

要么

arr.map(callback, [1,2,3]);

第二个例子不起作用,因为类Array没有函数调用f2()


[1,2,3,4,5]是Array“class”的一个实例,“class”具有map方法,这就是为什么以下代码是有效的:

[1,2,3,4,5].map(f1)

map方法可以接受任何函数作为参数,并且传入你的f1函数。 它将在map函数内执行,并作为独立函数执行。

数组“类”没有f2方法,这就是为什么这是无效的代码:

[1,2,3,4,5].f2()

这里, f2立即执行并且是[1,2,3,4,5]对象的一部分


在第一种情况下, map被定义为Array的全局函数公共函数。 因此,您可以通过map(arr)arr.map(..)

在第二种情况下,因为您只将f2定义为全局函数,这意味着数组无法访问它。

链接地址: http://www.djcxy.com/p/19045.html

上一篇: "dot function" operator in JavaScript

下一篇: Why modifying `Array.prototype` doesn't work?