var myModule = (function(){
var myObj = {
fname:"Shashank",
lname:"madan",
job:"Student",
birthYear: 1999,
}
return {
age:function(birthYear){
return birthYear - 2017;
},
findJob:function(job){
if(job == "Student"){
console.log("Work Hard");
}else{
console.log("What do you do?");
}
},
fullName: function(fname, lname){
return this.fname + this.lname
}
};
})();
问题是每当我尝试访问公开的返回元素时,我会得到奇怪的结果,因为myModule.age()
NaN
而findJob()
是"what do you do?"
而不是"Work Hard"
{1}}。
答案 0 :(得分:0)
返回的所有三个函数至少包含一个参数。你还没有给他们提供返回结果所需的论据。这解释了NaN
在调用age()
和"what do you do?"
时调用findJob()
(基本上job
不等于“学生”,因为它是undefined
)。
现在查看您的代码我非常确定您要在函数中使用myObj
中包含的变量,这样如果您致电myModule.age()
,您将获得18
。所以这是代码:
var myModule = (function() {
var myObj = {
fname: "Shashank",
lname: "madan",
job: "Student",
birthYear: 1999,
}
return {
age: function(birthYear) {
return 2017 - myObj.birthYear;
},
findJob: function(job) {
if (myObj.job == "Student") {
return "Work Hard";
} else {
return "What do you do?";
}
},
fullName: function(fname, lname) {
return myObj.fname + myObj.lname
}
};
})();
console.log(myModule.age())
console.log(myModule.findJob())
我给了你那些代码,这样你就可以看到你的错误了。如果您希望能够访问它的元素,则必须在返回的对象中访问myObj
。
但在我看来,这不是解决这个问题的最好方法。假设您想要两个对象而不是一个对象?你需要使用类。这样每个对象都有自己的fname
,lname
,job
和fullName
。
let Module = function(fname, lname, job, birthYear) {
// on instantiation we define the object's properties with the given arguments
this.fname = fname;
this.lname = lname;
this.job = job;
this.birthYear = birthYear;
this.age = function() {
return 2017 - this.birthYear; // <- we use `this` to access the object's property
};
this.findJob = function() {
if (this.job === "Student") {
return "Work Hard";
} else {
return "What do you do?";
}
};
this.fullName = function() {
return this.fname + this.lname
};
};
let myModule = new Module("Shashank", "madan", "Student", 1999);
console.log(myModule.age())
console.log(myModule.findJob())
注意我如何调用我使用this
的类中的属性。只要我在类的定义中,我就可以使用this
来访问其他属性和方法(方法是类中的函数,但它们是相似的)。
但是,当我在外面时,我需要使用new
语法实例化一个对象,如下所示:
let myModule = new Module("Shashank", "madan", "Student", 1999)
最后,您可以创建其他模块:例如
let anotherModule = new Module ("Winnie", "The Pooh", "Bee Hunter", 1926)
并且
anotherModule.fullName()
当然会返回"Winnie The Pooh"
。