Typescript Object.assign() VS 创建新对象效率
Typescript Object.assign() VS create new object Efficiency
我有两种方法来实现一个带有常量的方法,但我不确定哪种方法更好。有人可以咨询吗?谢谢!
方法 1:将常量从 class 中取出,这只会调用常量一次,但我需要 return 一个新变量
const X = {a: 0, b: 1, c: 2}
export class A{
private method a (val: any) {
return {...X, ...val}
}}
方法二:在方法中放一个常量,每次调用方法(我是两次)都会调用这个常量,而不需要创建一个新的对象。
export class A{
private method a (val: any) {
const x = {a: 0, b: 1, c: 2}
return Object.assign(x, val)
}}
我认为这里没有灵丹妙药,每个情况可能不同,但我的建议是更多地关注变量的范围,而不是它被调用了多少次或创建了多少次对象。在第一种方法中,你在 class A 的范围之外声明了一个常量,所以基本上,任何 class 或同一范围内的函数都可以访问这个变量,在你的情况下它并没有那么糟糕,因为它是一个常量,但假设你已经用 let
声明了一个变量,在这种情况下你的问题开始出现,原因是任何 class 或函数可以重新分配这个变量任何值,从而导致副作用和你的代码中的错误,一个愚蠢的例子会澄清事情:
let x = 5
function isEven(value: number) {
// here i'm overwriting the value of x
x = 2
return value % 2 === 0;
}
function destroyTheWorldIfEven(value: number) {
if(isEven(value)){
console.log("x is", x)
console.log("you world has been destroyed")
return
}
return console.log("you are safe")
}
// at the first call x is 5
destroyTheWorldIfEven(x)
// but at the second call x is 2 due the reassign in isEven function
destroyTheWorldIfEven(x)
因此,如果您不需要在函数或 class 之间共享 const X
,我认为没有任何理由将其保留在 class 的范围之外A,我的建议是把东西放回原处,那么:
- 如果
const x
只用在classA的一个方法中,保持在方法内。
- 如果
const x
被 class A 中的一种或多种方法使用,请将其保留为私有属性。
- 如果
const x
属于classA但必须被其他classes访问,保留为public属性但避免定义[=54] =] 方法。
我会为你留下一些好的参考:
最后这一篇是我认为最重要的一篇,主要是当你在使用OOP的时候,一定要读一读。
我有两种方法来实现一个带有常量的方法,但我不确定哪种方法更好。有人可以咨询吗?谢谢!
方法 1:将常量从 class 中取出,这只会调用常量一次,但我需要 return 一个新变量
const X = {a: 0, b: 1, c: 2}
export class A{
private method a (val: any) {
return {...X, ...val}
}}
方法二:在方法中放一个常量,每次调用方法(我是两次)都会调用这个常量,而不需要创建一个新的对象。
export class A{
private method a (val: any) {
const x = {a: 0, b: 1, c: 2}
return Object.assign(x, val)
}}
我认为这里没有灵丹妙药,每个情况可能不同,但我的建议是更多地关注变量的范围,而不是它被调用了多少次或创建了多少次对象。在第一种方法中,你在 class A 的范围之外声明了一个常量,所以基本上,任何 class 或同一范围内的函数都可以访问这个变量,在你的情况下它并没有那么糟糕,因为它是一个常量,但假设你已经用 let
声明了一个变量,在这种情况下你的问题开始出现,原因是任何 class 或函数可以重新分配这个变量任何值,从而导致副作用和你的代码中的错误,一个愚蠢的例子会澄清事情:
let x = 5
function isEven(value: number) {
// here i'm overwriting the value of x
x = 2
return value % 2 === 0;
}
function destroyTheWorldIfEven(value: number) {
if(isEven(value)){
console.log("x is", x)
console.log("you world has been destroyed")
return
}
return console.log("you are safe")
}
// at the first call x is 5
destroyTheWorldIfEven(x)
// but at the second call x is 2 due the reassign in isEven function
destroyTheWorldIfEven(x)
因此,如果您不需要在函数或 class 之间共享 const X
,我认为没有任何理由将其保留在 class 的范围之外A,我的建议是把东西放回原处,那么:
- 如果
const x
只用在classA的一个方法中,保持在方法内。 - 如果
const x
被 class A 中的一种或多种方法使用,请将其保留为私有属性。 - 如果
const x
属于classA但必须被其他classes访问,保留为public属性但避免定义[=54] =] 方法。
我会为你留下一些好的参考:
最后这一篇是我认为最重要的一篇,主要是当你在使用OOP的时候,一定要读一读。