Js对象属性未被修改

时间:2017-10-22 19:36:09

标签: javascript node.js

我有一个函数,它接收一个对象(称为“卡”)。在这个函数里面我想改变它的一个属性的值,但它不会改变。 这是功能:

 function replaceImgsUrl(card){
    console.log("card: " , card);// prints card: {imgs:[]}
    card.imgs = "sex";
    console.log("new card: " , card); // prints new card: {imgs:[]}
    return card;
}

顺便说一句,我使用node.js,虽然我不认为这会有所作为。 有没有人知道为什么会发生这种情况?

3 个答案:

答案 0 :(得分:2)

我不确定您的card对象是如何定义的,以及它是freezed还是您正在使用some kind of immutable library,这会阻止您改变属性。
但是否则它可以正常工作,你可以在这里看到:



 var myCard = {
  imgs: []
 }
 
 function replaceImgsUrl(card){
    console.log("card: " , card);// prints card: {imgs:[]}
    card.imgs = "sex";
    console.log("new card: " , card); // prints new card: {imgs:[]}
    return card;
}

replaceImgsUrl(myCard);




答案 1 :(得分:0)

您的代码似乎使用实际对象作为参数,但看起来很奇怪。为什么要用字符串替换类型为数组的对象属性?



ToolStripMenuItem




答案 2 :(得分:0)

看起来card对象被冻结Object.freeze()或以其他方式配置为不允许修改对象属性。

如果您真的希望imgs属性从数组更改为字符串,那么除了创建新对象之外,您可能没有其他方法:

function replaceImgsUrl(card){
    console.log("card: " , card);// prints card: {imgs:[]}
    card = Object.assign({}, card); // get shallow copy
    card.imgs = "sex";
    console.log("new card: " , card); // prints new card: {imgs:"sex"}
    return card;
}

请注意,只有返回的值才能拥有您想要的对象;原始对象不会改变。

相关问题