为什么我不能调用原型上的方法?
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();
我试图在闭包中创建一个 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();