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