修改方法中作为参数传递的对象是一种不好的做法吗?

时间:2018-10-24 22:44:57

标签: javascript node.js

修改在方法内部作为参数传递的对象是一种不好的做法吗?

doSomething1和doSomething2有什么区别?两者的作用相同,但方式不同。哪个合适,为什么呢?

class Foo {
  constructor () {
    this.bar = { aaa: 123, bbb: 456 }
    this.doSomething1(this.bar)
    this.doSomething2()
  }

  doSomething1(arg) { arg.aaa = 10 },
  doSomething2() { 
    this.bar.bbb = 0
  }

}

代码本身并不实际,而只是示例代码。

3 个答案:

答案 0 :(得分:1)

这就是函数和方法之间的区别。方法是在对象上定义的功能,它知道对象的所有属性并允许对其进行修改(也称为更改或更改状态)。 doSomething2Foo类的方法。因此,它应该具有更改Foo实例的任何属性的权利或特权。

另一方面,

doSomething1是伪装为方法的函数。它无权修改接收到的参数,因此不应修改。如果确实需要,那么请使用具有updated属性的新副本代替。

答案 1 :(得分:0)

区别在于doSomething1可用于修改 any 对象,而doSomething2()是专门设计用于仅修改对象{的bar属性{1}}被调用的对象。

所以Foo是更通用的功能。由于它没有引用doSomething1(),因此它实际上甚至不需要在类中,只是该类限制了如何调用它。

此外,要调用类方法,您需要在对象this上调用它。

this.methodname(...)

答案 2 :(得分:0)

这些天来,现代JavaScript吸引了函数式编程领域的大量关注。在函数式编程中,您永远不会修改任何内容。您提出的问题是非常主观的,许多人会有不同的意见,但我的意见是,这将立即使您无法通过技术测试。如果我在技术面试中看到您这样做,那将是我下定决心的那一刻,并且无论其他面试的效果如何,您都绝对不会仅仅因为看到您修改了功能参数而获得了职位。 >

返回对象的新实例。

return { ...arg, prop: 'New value' };
相关问题