2017-04-05 81 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成爲兩個不同的變量。