2013-02-03 43 views
5

如果不將新對象分配給變量會發生什麼? 例如:如果新實例對象未分配給變量會發生什麼?

function MyConstructor() { 
    // Codes here 
}; 

new MyConstructor(); // new object instance is not assign to a variable 

此編碼是危險的嗎? 它是否打開全局名稱空間? 是否可以訪問使用此樣式創建的對象?

謝謝。

+0

爲什麼你會創建一個對象,而不是創建一個對它的引用?之後我不認爲有可能訪問它,除非你從函數返回它。 –

+0

它是'MyConstructor'還是它'Test'? – Bergi

+0

哎呀對不起是MyConstructor不考..謝謝你們的回答.. :) – japt

回答

8
  • 此編程是危險的嗎? -
  • 它是否打開全局命名空間? -
  • 是否可以訪問使用此樣式創建的對象? -

正如你正確地指出,呼叫new MyConstructor()將返回一個新對象時,引用都將只是沒有得到保存,並會因此得到由垃圾收集器很快刪除。 你只充當新對象的機會是直接

new MyConstructor().someMethod(); 

...在那之後,你會失去你的機會和新的對象引用在外太空:)

+0

+1的第二部分。 –

+3

'this'在構造函數內部,然後存儲在其他地方將工作。 –

+0

@LayTaylor:很多事情都會起作用,但由於OP沒有提到任何地方的一些瘋狂的構造,爲什麼我們會假設這樣? – jAndy

1

丟失,因爲有它創建後沒有提及它,它很快就被垃圾收集。

只是供參考:創建對象80%到90%的時間的原因是,他們可以被引用和以後使用。

+2

'this'在構造函數內部,然後存儲在別處將工作。 –

4

除非構造函數本身保存到某個地方的對象之外的對象的引用,有對象再沒有提及,而垃圾收集器將其刪除。

的代碼是沒有危險,也不會添加任何東西到全局命名空間,這是不可能達到的目標,除非構造使其成爲可能。

的地方可以使用,如果構造函數註冊的對象本身將是一個例子:

var myHandlers = {}; 

function Handler(name) { 
    myHandlers[name] = this; 
} 

new Handler("test"); 

使用類似的東西的缺點當然是它很難跟隨所發生的事情的。

相關問題