才意识到 JS 的 function 是个对象

2016-08-24 22:57:00 +08:00
 xi_lin
之前一直只当成是 primitive value 了
其实是个对象,可以当做{}来使用的特殊的函数对象

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function
2041 次点击
所在节点    分享发现
11 条回复
FreeDog
2016-08-25 00:19:42 +08:00
Python 、 Java 中 Function 属于 First-class object ,即 First-class function ( https://en.wikipedia.org/wiki/First-class_function)
FreeDog
2016-08-25 00:19:54 +08:00
@FreeDog JavaScript 。。。打错了
hronro
2016-08-25 00:27:07 +08:00
JS 中万物皆对象的嘛。即使是数字、布尔值这种基本类型的数据,实际上在语言内部也会把这些基本类型的数据转换成对象之后再使用。
xi_lin
2016-08-25 16:26:14 +08:00
@FreeDog 嗯,知道是一等公民,没想到是个 object
xi_lin
2016-08-25 16:29:13 +08:00
@hronro 还是有点不一样。数字变量无法直接当成对象使用, function 却可以
Fishdrowned
2016-08-25 18:28:36 +08:00
@xi_lin 数字可以直接当对象使用,试一下:

1..toPrecision(2);
xi_lin
2016-08-25 22:06:57 +08:00
@Fishdrowned
..是什么语法呢?
我前面那个单对象使用说法不准确,想表达的其实是当 map 使用
比如
```
var a = function() {console.log('a')};
a.test = 'abc';
console.log(a.test); // abc

var b = 1;
b.test = 'abc';
console.log(b.test); // undefined
```
lxrmido
2016-08-26 08:51:59 +08:00
@xi_lin
1.表示 1.0
因为数字后面跟随.表示小数点,所以要再加一个点,等同于:
1.0.toPrecision(2);
xi_lin
2016-08-26 10:29:39 +08:00
@lxrmido 为啥浮点数可以直接用 toPrecision 而整数不行呢? toPrecision 不是 Number 的自带方法么?
lxrmido
2016-08-26 12:02:22 +08:00
@xi_lin
整数不是不可以,而是根据 JS 的语法,解析器会把整数后接的.当做小数点。
xi_lin
2016-08-26 12:09:38 +08:00
@lxrmido 了解了,谢谢!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/301586

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX