m20*_*33m 5 node.js typescript
我有这个文件:
对象.ts:
export const myObject {
prop1: "prop1",
prop2: "prop2",
...
...
}
Run Code Online (Sandbox Code Playgroud)
我有这门课
我的班级.ts
export class MyClass {
private obj: any;
constructor(obj: any) {
this.obj = obj
}
}
Run Code Online (Sandbox Code Playgroud)
我有这个文件:
主要.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);
Run Code Online (Sandbox Code Playgroud)
将以这种方式创建类的实例,通过值或引用MyClass传递对象myObject。换句话说,myObject对象会被复制3次吗?我担心记忆力。
UDP日期
考虑另一个例子:
我的班级.ts
export class MyClass {
private obj: any;
constructor(obj: any) {
this.obj = obj
}
getValue(str: string) {
return obj[str];
}
}
Run Code Online (Sandbox Code Playgroud)
函数1.ts
import { myObject } from "object";
let myClass = new MyClass(myObject)
export function fn1(str: string) {
return myClass.getValue(str);
}
Run Code Online (Sandbox Code Playgroud)
函数2.ts
import { myObject } from "object";
let myClass = new MyClass(myObject)
export function fn2(str: string) {
return myClass.getValue(str);
}
Run Code Online (Sandbox Code Playgroud)
主要.ts
import { fn1 } from "function1";
import { fn2 } from "function2";
console.log(fn1(str));
console.log(fn2(str));
Run Code Online (Sandbox Code Playgroud)
第二个示例会创建 的两个副本吗myObject?
对于您的第一个示例,myObject仅创建一次,因为参数是通过引用传递的(或者指向对象的指针是通过值传递的)。
对于第二个示例,JavaScript 的评估策略没有任何变化,因此myObject仍然是相同的实例。但是如果你查看编译后的 JavaScript 代码,你会发现 function1.ts 和 function2.ts 将被包装在两个不同的函数中,这使得它们myClass成为两个不同的变量。