m0m*_*eni 2 javascript object ecmascript-6
看一下这里的例子:
https://github.com/rackt/redux/blob/master/examples/real-world/actions/index.js
return {
[CALL_API]: {
types: [ USER_REQUEST, USER_SUCCESS, USER_FAILURE ],
endpoint: `users/${login}`,
schema: Schemas.USER
}
}
Run Code Online (Sandbox Code Playgroud)
CALL_API
在方括号中,所以我假设它可能是一个数组,这是一个解构的东西.
但CALL_API
定义为
export const CALL_API = Symbol('Call API')
Run Code Online (Sandbox Code Playgroud)
所以它不是数组或任何东西.我也看到了使用非符号的方括号.那么有什么区别呢
CALL_API: {}
Run Code Online (Sandbox Code Playgroud)
和
[CALL_API]: {}
Run Code Online (Sandbox Code Playgroud)
这是一个计算属性 - 它相当于:
let result = {}
result[CALL_API] = { ... };
return result;
Run Code Online (Sandbox Code Playgroud)
结合这个Symbol
让图书馆作者创建一个不会与其他协议冲突的协议(例如,如果协议是一个字符串"call",那么它可能会与其他someObject.call
用于其(无关)协议的库发生冲突- 以及与之冲突Function.prototype.call
. )