JavaScript に関する Mozilla のチュートリアルでこれに遭遇しましたが、理解できないようです。多くのスタックオーバーフローの質問を読みましたが、質問に対する答えが見つかりませんでした。以下にコード スニペットを示します。
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()