2014-11-21 2 views
2

Может кто-нибудь объяснить, как это работает. Объект проверяет, был ли он создан, а если нет, то создается экземпляр. Это напоминает мне синглтон, но я не уверен, правильно ли понял этот код.Объект Javascript, созданный в его объявлении

var circularBuffer = function (size) { 

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

}; 

ответ

3

Эта модель гарантирует, что называете ли вы circularBuffer с new или нет, вы все равно получите новый экземпляр.

Так как из следующего результата в новом circularBuffer экземпляра, который присваивается cb:

var cb = new circularBuffer(100); 

var cb = circularBuffer(100); 

В первом случае this является circularBuffer экземпляром, так что следует if пути. Во втором случае - window, поэтому метод следует по пути else и вместо этого будет повторно звонить, используя new.

+1

Wich является эквивалентом этого: 'вара = функция кольцевого буфера (размер) { , если (window.circularBuffer) { this.size = размер; this.clear(); } else { return new circleBuffer (размер); } }; ' – kappaallday