有人可以解释这是如何工作的。对象检查是否已实例化,如果尚未实例化,则实例化自身。它使我想起了一个单例,但不确定我是否正确理解此代码。
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);
在第一种情况下,
this
是circularBuffer
实例,因此它遵循if
路径。在第二种情况下,this
是window
,因此该方法遵循else
路径,并且将改为使用new
进行自身调用。