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

标签 node.js typescript

我有这个文件:

对象.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/

相关文章:

node.js - 覆盖 sails GET 多对一蓝图

php - Nodejs从数据库读取 session

javascript - 无法删除事件监听器 TypeScript/OOP JavaScript

javascript - 如何调试 Angular 元素?

javascript - typescript 访问监听器内的全局变量

css - 在创建的 :, 中,我的方法无法正常工作

node.js - package.json 上的代理 Nodejs Express 在校园网络上引发错误

javascript - Angular 2 如何改善 Internet Explorer 11 上的 DOM 绘制时间

javascript - 错误 : Cannot find a differ supporting object '[object Object]' of type 'object' . NgFor 只支持绑定(bind)到 Iterables

node.js - 如何在发布之前安装已发布的范围包?