我在 Mozilla 的 JavaScript 教程中遇到了这个问题,但我似乎无法理解。我阅读了很多 stackoverflow 问题,但找不到问题的答案。下面给出了一个代码片段。
var createPet = function(name) {
var sex;
return {
setName: function(newName) {
name = newName;
},
getName: function() {
return name;
},
getSex: function() {
return sex;
},
setSex: function(newSex) {
if(typeof newSex == "string" && (newSex.toLowerCase() == "male" || newSex.toLowerCase() == "female")) {
sex = newSex;
}
}
}
}
var pet = createPet("Vivie");
var pet2 = createPet("Sam");
pet.getName(); // Vivie
pet2.getName(); // Sam
createPet
似乎只返回一个函数对象的映射,但在任何地方都没有提到变量name
,但不知何故,pet
并且pet2
表现得像一个类的对象,具有一个名为的成员变量name
和一堆成员函数getName()
,setName()
等等。这是如何工作的?