gpt4 book ai didi

node.js - typescript :按值或按引用传递

转载 作者:搜寻专家 更新时间:2023-10-30 21:29:44 27 4
gpt4 key购买 nike

我有这个文件:

对象.ts:

export const myObject {
prop1: "prop1",
prop2: "prop2",
...
...
}

我有这门课

我的类.ts

export class MyClass {
private obj: any;

constructor(obj: any) {
this.obj = obj
}
}

我有这个文件:

主要.ts

import { myObject } from "object";
import { MyClass } from "my-class";


let class1 = new MyClass(myObject);
let class2 = new MyClass(myObject);
let class3 = new MyClass(myObject);

将创建类 MyClass 的实例,以这种方式通过值或引用传递对象 myObject。换句话说,myObject对象是否会被复制三次;我担心内存。

更新

考虑另一个例子:

我的类.ts

export class MyClass {
private obj: any;

constructor(obj: any) {
this.obj = obj
}
getValue(str: string) {
return obj[str];
}
}

函数1.ts

import { myObject } from "object";

let myClass = new MyClass(myObject)

export function fn1(str: string) {
return myClass.getValue(str);
}

函数2.ts

import { myObject } from "object";

let myClass = new MyClass(myObject)

export function fn2(str: string) {
return myClass.getValue(str);
}

主要.ts

import { fn1 } from "function1";
import { fn2 } from "function2";

console.log(fn1(str));
console.log(fn2(str));

第二个例子会创建 myObject 的两个副本吗?

最佳答案

对于您的第一个示例,myObject 只会创建一次,因为参数是通过引用传递的(或者指向对象的指针是通过值传递的)。

对于您的第二个示例,JavaScript 的评估策略没有任何变化,因此 myObject 仍将是同一个实例。但是如果你查看编译后的 JavaScript 代码,你会发现 function1.ts 和 function2.ts 将被包装在两个不同的函数中,这使得 myClass 成为两个不同的变量。

关于node.js - typescript :按值或按引用传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43239171/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com