问一个 VueJs 的问题

@Ta 2022-10-29发布,2022-10-29修改 12996点击
我想这么写 不行

<div v-for="item of list">
<div @click="PromptSetValue(item.it)"></div>


function PromptSetValue(e){
    var text = prompt();
    e = text;
}


需要这么写 才可以
demo : https://codepen.io/tsymq-live/pen/vYrOPYm
<div v-for="item of list">
<div @click="PromptSetValue(item)"></div>


function PromptSetValue(e){
    var text = prompt();
    e.it = text;
}
回复列表(10|隐藏机器人聊天)
  • @Ta / 2022-10-29 / /

    @淡然,因为 js 没法引用对象的键?

  • @Ta / 2022-10-29 / /
    @无名啊, 应该是没办法引用对象的值,我想找到其它的写法
  • @Ta / 2022-10-29 / /

    @淡然,下面的写法有何不妥吗?你原始问题是啥?

  • @Ta / 2022-10-29 / /
    @无名啊, 这样这个方法只能改变it的值,这个方法我需要公用
  • @Ta / 2022-10-29 / /

    @淡然function PromptSetValue(e, key)

  • @Ta / 2022-10-29 / /
    @无名啊,这算一个办法吧,但是还不够友好
  • @Ta / 2022-10-29 / /

    @淡然,回调 PromptSetValue(v => item.it = v) 或 异步 PromptSetValue().then(v => item.it = v)

  • @Ta / 2022-10-29 / /
    PromptSetValue(list, 'it') 
    
    function PromptSetValue(list, key){
        var text = prompt();
        list[key]= text;
    }
    

    红米K30 Pro(变焦版)

  • @Ta / 2022-10-31 / /

    这个和 Vuejs 无关,和 js 引用类型传值有关系
    小米MIX2s(白)

  • @Ta / 2022-10-31 / /

    按值传递时,函数的形参是被调用时所传实参的副本。修改形参的值并不会影响实参。
    按引用传递,函数的形参接收实参的隐式引用,而不再是副本。这意味着函数形参的值如果被修改,实参也会被修改。同时两者指向相同的值。

    所以当你传递 item.it 时,获得的是一个基本类型值的拷贝副本。而当你传递 item 时,获得的是 item 对象的引用。

    这个应该可以回答你的疑惑:
    JS基础之传参(值传递、对象传递)

添加新回复
回复需要登录