为什么我不能调用原型上的方法?

Why can't I call a method on the prototype?

我试图在闭包中创建一个 JavaScript 对象构造函数,然后 return 构造函数,这样我就可以在不与其他 JS 库发生任何冲突的情况下创建该对象。

考虑这段代码:

Test = (function(){

    var T = function(){
        this.x = 0;
    }

    T.prototype.doSomething = function(){
        this.x = 10;
    }

    return T;

});
var test = new Test();
test.doSomething(); 
alert(test.x);

为什么 test.doSomething() 不是一个函数,当我在原型中定义它时?

您没有创建正确函数的实例!如果你看 Test:

var Test = (function() {
  //...
  return T;
});

在这里,您将 Test 分配给 函数 returns T,而不是 T 本身!这就是为什么不能在 T 的原型上调用方法的原因。相反,使用 IIFE:

var Test = (function() {

})(); //Important!

这会将 T 的引用分配给 Test。然后创建一个新实例:

new Test();