Typescript:按值传递或按引用传递

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

Lif*_*ang 5

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

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