如果不將新對象分配給變量會發生什麼? 例如:如果新實例對象未分配給變量會發生什麼?
function MyConstructor() {
// Codes here
};
new MyConstructor(); // new object instance is not assign to a variable
此編碼是危險的嗎? 它是否打開全局名稱空間? 是否可以訪問使用此樣式創建的對象?
謝謝。
如果不將新對象分配給變量會發生什麼? 例如:如果新實例對象未分配給變量會發生什麼?
function MyConstructor() {
// Codes here
};
new MyConstructor(); // new object instance is not assign to a variable
此編碼是危險的嗎? 它是否打開全局名稱空間? 是否可以訪問使用此樣式創建的對象?
謝謝。
正如你正確地指出,呼叫new MyConstructor()
將返回一個新對象時,引用都將只是沒有得到保存,並會因此得到由垃圾收集器很快刪除。 你只充當新對象的機會是直接
new MyConstructor().someMethod();
...在那之後,你會失去你的機會和新的對象引用在外太空:)
+1的第二部分。 –
'this'在構造函數內部,然後存儲在其他地方將工作。 –
@LayTaylor:很多事情都會起作用,但由於OP沒有提到任何地方的一些瘋狂的構造,爲什麼我們會假設這樣? – jAndy
丟失,因爲有它創建後沒有提及它,它很快就被垃圾收集。
只是供參考:創建對象80%到90%的時間的原因是,他們可以被引用和以後使用。
'this'在構造函數內部,然後存儲在別處將工作。 –
除非構造函數本身保存到某個地方的對象之外的對象的引用,有對象再沒有提及,而垃圾收集器將其刪除。
的代碼是沒有危險,也不會添加任何東西到全局命名空間,這是不可能達到的目標,除非構造使其成爲可能。
的地方可以使用,如果構造函數註冊的對象本身將是一個例子:
var myHandlers = {};
function Handler(name) {
myHandlers[name] = this;
}
new Handler("test");
使用類似的東西的缺點當然是它很難跟隨所發生的事情的。
爲什麼你會創建一個對象,而不是創建一個對它的引用?之後我不認爲有可能訪問它,除非你從函數返回它。 –
它是'MyConstructor'還是它'Test'? – Bergi
哎呀對不起是MyConstructor不考..謝謝你們的回答.. :) – japt