所以,第一個問題 - 請溫和。如何設置在console.log中返回的JavaScript對象名稱?
我正在與一些來自各種非web編程背景的其他開發人員合作開發一個JavaScript重型項目,並且我們決定嘗試在我們的JavaScript僞代碼類中使用公共和私有方法和屬性,純粹作爲良好的編碼習慣(即我們知道它沒有實際的優勢或安全性)
我們已經玩弄了幾種不同的公開方式&私人(即使用局部範圍變量和功能的特權方法公共消費),我們現在已經決定讓我們的JavaScript類構造函數實際返回一個僅表示其公共接口的對象,實際上隱藏了其他所有內容。
下面是一個例子:
function MyObject()
{
var _this = this;
this._privateProperty = 'somevalue';
this._privateMethod = function()
{
// Do Something
}
this.public =
{
publicProperty : _this._privateProperty,
publicMethod : function(){ return _this.privateMethod() }
}
return this.public;
}
哪些實例化時,並記錄在Chrome:
var obj = new MyObject();
console.log(obj);
輸出:
> Object
> publicMethod: function(){ return _this.privateMethod() }
> publicProperty: "somevalue"
>__proto__: Object
現在我的問題: 因爲正在返回公衆接口從構造函數作爲新的對象,當你console.log你會的請注意,它將自己標識爲> Object
- 而如果我們不返回該公共接口,則會將其標識爲> MyObject
。
理想情況下,我們希望將後者顯示用於調試目的,並且我知道如何訪問_this.constructor.name
的配置文件的「MyObject」名稱,但不知道如何設置它以使其以這種方式識別。
有誰知道如何手動設置?
注意:
我知道這是在某些方面的JavaScript約定的私生子,並試圖以適應一個圓孔方釘,但我們發現它是完成什麼很明顯的和可讀的方式,我們試圖去做。我願意提供關於如何用不同設計來實現這一點的建議,但我最終正在尋找符合我們當前設計的答案。
我有點驚訝,看到你收到了返回值。必須是因爲它是構造對象的屬性。不知道。無論如何,你正在返回一個普通的Object,所以這就是開發者工具可能會報告的內容。如果你正在尋找一個適合你設計的答案,我想我不得不問你允許什麼樣的設計偏差? – user113716 2011-01-27 21:40:49
...關於返回值,我認爲當用`new`調用構造函數時忽略它。看起來它會返回任何類型的對象。 – user113716 2011-01-27 21:49:57
那麼,我們確實認爲在一個命名對象中擁有所有的公共接口都是新穎的 - 這樣我們實際上可以對類的公共方法和屬性進行內部引用。我希望在公開場合「哦,是的,只是返回object.name = _this.constructor.name」 - 但我願意接受設計更改,但仍然明顯易讀:) – drewdah 2011-01-28 00:42:51