修改在方法内部作为参数传递的对象是一种不好的做法吗?
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
}
}
代码本身并不实际,而只是示例代码。
答案 0 :(得分:1)
这就是函数和方法之间的区别。方法是在对象上定义的功能,它知道对象的所有属性并允许对其进行修改(也称为更改或更改状态)。 doSomething2
是Foo
类的方法。因此,它应该具有更改Foo
实例的任何属性的权利或特权。
doSomething1
是伪装为方法的函数。它无权修改接收到的参数,因此不应修改。如果确实需要,那么请使用具有updated属性的新副本代替。
答案 1 :(得分:0)
区别在于doSomething1
可用于修改 any 对象,而doSomething2()
是专门设计用于仅修改对象{的bar
属性{1}}被调用的对象。
所以Foo
是更通用的功能。由于它没有引用doSomething1()
,因此它实际上甚至不需要在类中,只是该类限制了如何调用它。
此外,要调用类方法,您需要在对象this
上调用它。
this.methodname(...)
答案 2 :(得分:0)
这些天来,现代JavaScript吸引了函数式编程领域的大量关注。在函数式编程中,您永远不会修改任何内容。您提出的问题是非常主观的,许多人会有不同的意见,但我的意见是,这将立即使您无法通过技术测试。如果我在技术面试中看到您这样做,那将是我下定决心的那一刻,并且无论其他面试的效果如何,您都绝对不会仅仅因为看到您修改了功能参数而获得了职位。 >
返回对象的新实例。
return { ...arg, prop: 'New value' };