为什么我不能在我的模块中调用构造函数方法?
Why can't I call my constructor method within my module?
我有一个叫做Mole的模块:
var Mole = (function(){
function mole(id){
this.id = id;
}
var randomMole = function(){
var moleIndex = Math.ceil(Math.random() * 8);
var mole = moles[moleIndex];
return mole.id;
}
var score = 0;
var moles = [];
var generateMoles = function(){
for(var i = 1; i <= 8; i++){
var mole = new mole(i);
moles.push(mole);
}
}
return {
init: function(){
//var mole = mole;
generateMoles();
},
randomMole: randomMole,
score: function(){
return score;
},
incrementScore: function(){
score += 1;
}
}
})()
当文档准备好时,我调用Mole.init()。
调用generateMoles方法,该方法使用模块顶部的mole构造函数。除非在generateMoles函数中调用mole构造函数,否则我会得到以下错误:
model.js:19 Uncaught TypeError: mole is not a constructor
为什么mole不是构造函数?我把它定义为模块顶部的1。
我认为这可能是因为在init()函数中调用mole方法时,它不在generateMoles的范围内,因为init函数会为generateMoles创建一个新的闭包,其中不包括mole构造函数。所以我尝试了在init函数中定义mole的工作,所以它会被包含在给generateMoles的闭包中..但我仍然得到相同的错误,无论我是否这样做。
所以现在我不知道为什么我不能调用new mole()..任何帮助都将非常感激。谢谢。
var
声明被"提升到顶部"(即到仍然在函数内的最外层作用域,参见"var hoist ")。因此,您的generateMoles
相当于:
var generateMoles = function(){
var mole;
for(var i = 1; i <= 8; i++){
mole = new mole(i);
moles.push(mole);
}
}
这当然会破坏new mole(i)
表达式,因为mole
不再是指mole
函数,而是指该函数中的mole
变量。
m
:
var generateMoles = function(){
for(var i = 1; i <= 8; i++){
var m = new mole(i);
moles.push(m);
}
}
相关文章:
- 使用Google Visualization动态调用构造函数
- 拦截对构造函数的调用
- 在javascript中对数字调用构造函数
- 我应该在原型上还是在新创建的实例上调用构造函数方法
- 在javascript中调用构造函数中函数的对象
- 从“”调用构造函数;摘要“;基本“;类”;
- jshint 和 Function() gets:调用构造函数时缺少“new”前缀
- 缺少调用构造函数的“()”
- JS中的自调用构造函数
- 如何在javascript中从另一个类调用构造函数
- 如何在不调用构造函数的情况下复制对象及其原型链?
- 在javascript中未调用构造函数时绑定此函数
- 如果构造函数在另一个函数中,则新创建的对象调用构造函数undefined
- Javascript调用构造函数中的构造函数
- 为什么我不能在我的模块中调用构造函数方法?
- 覆盖Ext.data.存储,调用构造函数
- 扩展 jQuery 在每个方法调用上调用构造函数
- 如何通过方法传递类实例而不调用构造函数
- 在子生成器中只调用构造函数
- Javascript语法[..]]在函数调用/构造函数调用前