请教一个 js 箭头函数的基础问题

2021-02-03 01:19:07 +08:00
 volvo007

本意是想做一个判断,如果 this.goodId == 1,那么就获得一个 'a.json' 的本地 url 字符串;如果 this.goodId 是别的值,那么就拿别的字符串。

现在的问题是,这么写:

var url = ''
      url = () => {
          if(this.goodId == 1){
              return 'json/laptop.json'
          } else if (this.goodId == 2) {
              return 'json/mobile.json'
          }
      }

好像不太行。url 我用 console.log 调用后显示它是个函数,而并不是一个字符串

所以能通过箭头函数获得字符串的返回值吗?推荐这样做吗?(本意是通过箭头函数避免 var that = this 这种写法,这么写代码能跑起来)

3314 次点击
所在节点    JavaScript
32 条回复
abc635073826
2021-02-03 10:14:10 +08:00
你已经把 1+1 写好了,就差=了
GopherTT
2021-02-03 10:31:18 +08:00
先补补基础 不然天天问
bnrwnjyw
2021-02-03 10:31:53 +08:00
@TanMusong 你的回复显然不是我说的那些半吊子。
luogege
2021-02-03 10:38:38 +08:00
你得先明白 url 他被你赋值成了个函数,url ()才会 return 东西
KouShuiYu
2021-02-03 10:44:15 +08:00
获得箭头函数的返回值
```
let url = (()=>{
return 'hello world';
})()
```
cw2k13as
2021-02-03 10:44:25 +08:00
emmm,url 你得调用啊 url(),goodId 你最好作为参数传进去啊
darknoll
2021-02-03 10:46:27 +08:00
百度下 IIFE
nekochyan
2021-02-03 11:45:30 +08:00
箭头函数也是一个函数,你函数都没执行,哪来的返回值,可以立即执行一次获取返回值再赋值
```
var url = (()=>{
if(this.goodId == 1){
return 'json/laptop.json'
} else if (this.goodId == 2) {
return 'json/mobile.json'
}
})()
```
KuroNekoFan
2021-02-03 12:07:29 +08:00
你需要 this free style
no1xsyzy
2021-02-03 12:14:46 +08:00
@volvo007 500 多节到底是在讲什么?疯了吧

就算不知道 IIFE,给它个名字然后再 call
getURL = () => {...}
url = getURL()
总行吧
LiubaiQ
2021-02-03 12:17:01 +08:00
我理解的
1. 给 url 赋值时还有额外的逻辑;
2. 希望 this 永远指向其初始定义时的 Context;
3. 希望通过直接赋值这样的语法来调用一个 func ;

可以考虑 ES6 Class 及其 setter/getter 语法糖

```javascript
class c {
...
set urlSetter = (v) => {
this.url = v;
}

get urlGetter = (v) => this.url
...
}
```
fayetitus
2021-02-03 21:48:22 +08:00
https://github.com/tc39/proposal-do-expressions
也许你需要这个提案。
不过 do expressions 才 stage1 。在没有 do expressions 的时候,看能不能接受 IIFE,如果不接受,那就……不优雅地写,爱咋写都行。

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

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

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

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

© 2021 V2EX