2014-11-21 62 views
2

有人可以解釋這是如何工作的。一個對象檢查它是否被實例化,如果沒有,則實例化它自己。它讓我想起了一個單身人士,但我不確定是否正確理解了這段代碼。Javascript對象在其聲明中實例化

var circularBuffer = function (size) { 

    if (this instanceof circularBuffer) { 
     this.size = size; 
     this.clear(); 
    } else { 
     return new circularBuffer(size); 
    } 

}; 

回答

3

這種模式可以確保您是否調用circularBuffernew與否,你仍然可以得到一個新的實例。

因此,無論在新circularBuffer實例如下結果被分配到cb

var cb = new circularBuffer(100); 

var cb = circularBuffer(100); 

在第一種情況下,this是那麼它遵循if路徑circularBuffer實例。在第二種情況下,thiswindow,因此該方法遵循else路徑,並將使用new替代重新調用自身。

+1

WICH等同的這樣的: 'VAR環形緩衝區=函數(大小){ 如果(window.circularBuffer){ this.size =大小; this.clear(); } else { return new circularBuffer(size); } };' – kappaallday 2014-11-21 22:54:21