刚开始认真对待javascript。我的代码有什么问题?
var Person = (function(name,age){
var name = name, age = age;
var print = function(){
console.log('I"m '+name+', and I"m '+age+' year old');
}
return {print:print}
})();
Person.print("James",19);
我的名字和年龄未定义。我问题我也发现这种模式,如果你有很多方法,那么最后你的回报将是
return {methodA:methodA, methodB:methodB, methodC:methodC}
这对我来说太丑了。我应该将我的方法包装在回报中,如
return{
methodA: function(){
}
};
答案 0 :(得分:1)
如果您想将参数传递给您的方法,您应该将它们放在print
函数中,就像这样。
var Person = (function(){
var print = function(name,age){
console.log('I"m '+name+', and I"m '+age+' year old');
}
return {print:print}
})();
Person.print("James",19);

或者,你可能试图直接将参数传递给你的IIFE,但是如果是这样的话,我不确定我是否明白这一点。
var Person = (function(name,age){
var print = function(){
console.log('I"m '+name+', and I"m '+age+' year old');
}
return {print:print}
})("James",19);
Person.print();

是的,您可以在对象上返回您的方法,但从技术上讲,这不会显示模块模式。
var Person = (function(){
return {
print: function(name,age){
console.log('I"m '+name+', and I"m '+age+' year old');
}
}
})();
Person.print("James",19);

就个人而言,如果您真的想进入现代JavaScript,我建议使用像Webpack或Browserify这样的构建器来推荐ES6模块或CommonJS模块。
答案 1 :(得分:1)
这是因为Immediately invoked function expression。
这里你去固定片段。
var Person = (function(name,age){
var name = name, age = age;
var print = function(){
console.log('I"m '+name+', and I"m '+age+' year old');
}
return {print:print}
})("James",19);
Person.print();

答案 2 :(得分:0)
这是你想要的,制作名称和年龄共享变量
var Person = (function(name,age){
var name = name, age = age;
var print = function(name,age){
this.name = name;
this.age = age;
console.log('I"m '+this.name+', and I"m '+this.age+' year old');
}
return {print:print}
})();
Person.print("James",19);