您能否命名與其構造函數名稱相同的實例?你可以命名一個與其構造函數名稱相同的實例嗎?
var myFunc = new function myFunc(){};
?
,因爲它似乎,這替換爲新的實例...這意味着這是一個很好的辛格爾頓函數對象。
我還沒有看到使用這種人,所以我想,也有缺點到這一點,我不知道的......
有什麼想法?
您能否命名與其構造函數名稱相同的實例?你可以命名一個與其構造函數名稱相同的實例嗎?
var myFunc = new function myFunc(){};
?
,因爲它似乎,這替換爲新的實例...這意味着這是一個很好的辛格爾頓函數對象。
我還沒有看到使用這種人,所以我想,也有缺點到這一點,我不知道的......
有什麼想法?
YES ...
然而,它看起來奇怪,你要創建一個命名的功能,但從來沒有按名稱引用它。
較常見的模式(S)我見過的
function MyClass(){
this.val = 5;
};
MyClass.prototype.getValue = function() {
return this.val;
}
MyClass = new MyClass();
但是,當人們這樣做,我不知道爲什麼他們不只是使用文本對象
var MyClass = {
val: 5,
getValue: function() {
return this.val;
}
}
,我會甚至更喜歡使用此模塊模式
var MyClass = (function(){
var val = 5;
return {
getValue: function() {
return val;
}
};
})();
免責聲明
現在Singleton模式是否應使用,這是另一個問題(這個問題的答案是NO,如果你關心的測試,依賴管理性,可維護性,可讀性)
「新功能」的用途是什麼? – PeeHaa
我沒有注意到那部分,那肯定有點奇怪,讓我修復答案 –
如果您嘗試在「MyClass = new MyClass()」之後覆蓋MyClass-> val會發生什麼? –
看起來,這代替了功能對象與新實例
不,它不會取代任何東西。一個函數表達式(也就是你有什麼)的名稱只是函數本身內部的訪問,不在外面吧。
var myFunc = new function(){};
在一般情況下,如果你不希望某些符號訪問的,只是不要讓他們的全球:因爲如果你省略名稱這將是完全一樣的。定義一個函數裏面那些符號,就回到你想任何訪問,如:
var myobj = (function() {
function Foo() {};
// do whatever
return new Foo();
}());
不過,如果你只是想創建一個對象,它往往更容易使用的對象字面:
var myobj = {};
如果您只想從中創建一個實例,沒有理由使用構造函數。如果你想建立繼承,你可以使用Object.create
[MDN]
顯然這可能是可能的,但出於可讀性原因,你不想聲明實例的構造,這可能是去了解它... – user2071276
變量不影命名功能的好方法相同的地方,不是嗎? –
@Juan:正如我所說的,一個命名函數表達式不會創建與在封閉範圍該名稱的符號。該名稱僅在函數內部可用。嘗試'var foo = function bar(){};警報(巴);'。 –
@PeeHaa埽如果你不是一個JS傢伙,不管你是否看起來很奇怪......如果它看起來對JS開發者來說很奇怪,那麼我會更關心 –
其實它確實。因爲我在這裏學習...... – PeeHaa
@PeeHaa埽那麼這是一個教訓? –