有人可以解释这是如何工作的。对象检查是否已实例化,如果尚未实例化,则实例化自身。它使我想起了一个单例,但不确定我是否正确理解此代码。

var circularBuffer = function (size) {

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

};

最佳答案

此模式可确保无论您是否使用circularBuffer调用new,您仍将获得一个新实例。

因此,以下两项都会导致将新的circularBuffer实例分配给cb

var cb = new circularBuffer(100);

var cb = circularBuffer(100);


在第一种情况下,thiscircularBuffer实例,因此它遵循if路径。在第二种情况下,thiswindow,因此该方法遵循else路径,并且将改为使用new进行自身调用。

09-20 05:34