2017-04-05 38 views
1

传递我有这个文件:打字稿:通过值或引用

object.ts:

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

,我有这个类

我-class.ts

export class MyClass { 
    private obj: any; 

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

,我有这个文件:

个main.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对象被复制三次;我很关心记忆。

UDPATE

考虑这个其他例子:

我-class.ts

export class MyClass { 
    private obj: any; 

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

function1.ts

import { myObject } from "object"; 

let myClass = new MyClass(myObject) 

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

function2.ts

import { myObject } from "object"; 

let myClass = new MyClass(myObject) 

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

main.ts

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

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

将在第二个例子中创建的myObject两个副本?

+0

我打算假设它具有与[Javascript评估策略]相同的评估策略(https://en.wikipedia.org/wiki/Evaluation_strategy#Call_by_sharing) –

+0

它是通过引用。是的,这是一个JavaScript问题。不是TypeScript。 – unional

+0

@unional可以请检查我更新的问题吗? – m2008m1033m

回答

2

对于你的第一实例中,myObject将创建仅一次,因为自变量通过引用传递(或对象的指针通过值传递)。

为了您的第二个例子,有什么改变了对JavaScript的评价策略,所以myObject将仍然是相同的实例。但是,如果你看一下编译JavaScript代码,那么你会发现,function1.ts和function2.ts将被包装在两个不同的功能,这使得myClass成为两个不同的变量。