在构造函数中包装新的好坏?

Tim*_*thy 6 javascript

我观看了John Resig 在JavaScript库设计演示中的最佳实践 ; 一张幻灯片建议"调整"对象构造函数,以便实例化它自己.

function jQuery(str, con) {
    if (window === this) {
        return new jQuery(str, con);
    }
    // ...
}
Run Code Online (Sandbox Code Playgroud)

new jQuery("#foo")随之而来的,变成了jQuery("#foo").

我认为这很有趣,但我没有在我自己的代码中编写类似的构造函数.

过了一会儿,我在这里看了一篇文章.(对不起,我不记得哪个或者我提供了一个链接.我会更新问题,如果我能再次找到它.)其中一条评论说这样做是不好的做法躲避new程序员,但没有详细说明.

我的问题是,上述一般认为好,坏,或无动于衷,为什么?

Sea*_*sey 5

当人们忘记new在"类"功能面前使用操作符时,这是一种防御性技术.
逻辑是如果没有调用函数new,那么全局作用域仍然是当前作用域(而不是新实例),因此我们只使用new运算符调用相同的函数.

但是如果你问我,正确的做法就是抛出一个错误,让开发人员知道它犯了错误,而不仅仅是"接受"它.

但是,嘿,我猜它是根据jQuery的口头禅:
'而不是让用户编写高质量的代码,启用/强制他们编写不合逻辑和无效的代码'.