You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
2.7 KiB
2.7 KiB
通用概念 · 三种调用形式:值.方法() vs 函数() vs 类.方法()
跨主题概念,不属于某一天。困惑"什么时候用点、什么时候传参"时看这篇。
核心问题:这个函数"属于"谁?
形式一:值.方法() —— 方法(method)
函数属于某个值/对象,是它"自带的能力",用点 . 调用。
点前面那个值 = 被操作的主角,不用再传进去。
'hello'.toUpperCase() // toUpperCase 是字符串自带的能力
;[1, 2, 3].map((x) => x * 2) // map 是数组自带的能力
'a,b'.split(',') // split 属于字符串
形式二:函数(值) —— 独立函数(function)
函数不属于任何特定值,是自由的工具,数据当参数传进括号。
Number('42') // 转谁就传谁进去
parseInt('42px')
isNaN(x)
形式三:类.方法(值) —— 静态方法(static method)
函数挂在某个类/工具箱下做归类,数据仍然传进去。
Array.isArray([1, 2, 3]) // isArray 挂在 Array 名下
Math.max(1, 2, 3) // max 挂在 Math 名下
Number.isNaN(x) // 挂在 Number 名下
Object.keys(obj) // 挂在 Object 名下
⚠️ 区分:
Array.isArray(arr)的Array(大写=类/工具箱)和[1,2,3].map()点前的 数组实例(具体的值)是两回事。大写开头 = 工具箱;点前是具体值 = 实例。
对照表
| 形式 | 例子 | 数据在哪 | 感觉 |
|---|---|---|---|
值.方法() |
'hi'.toUpperCase() |
点前面 | 值自带的能力 |
函数(值) |
Number('42') |
括号里 | 自由工具 |
类.方法(值) |
Array.isArray(x) |
括号里 | 工具箱里的工具 |
"什么时候用哪个"?
真相:不是你选的,是语言设计时定死的。 每个功能造出来就固定了形式,只能记/查。
- 转大写只能
str.toUpperCase(),不能toUpperCase(str) - 判断数组只能
Array.isArray(x),不能x.isArray()
但有规律可猜:
- 操作字符串/数组/对象内容的 → 大多
值.方法() - 类型转换/数学/解析类工具 → 大多
函数()或类.方法()(Number、Math.、JSON.parse) Math./JSON./Object./Array.开头 → 几乎都是静态方法,数据传进去
记忆诀窍
问:"这是某个值天生就会的,还是外部工具对它做的?"
- 天生就会(大写化、截取、拆分)→
值.方法()- 外部工具处理它(转类型、算最值、解析)→
函数(值)/工具箱.方法(值)
🔧 实用技巧
不确定时,在编辑器里敲 值. 看自动补全弹什么 —— 弹出来的就是它自带的方法;
没弹出来的,就得找独立函数或静态方法。让 VS Code 帮你查最快。