閉鎖についての理解が不足しているため、そのような質問が何度も出てくると思います。JSではСlosuresが最も重要です。すべてのJSプログラマーは、その本質を感じなければなりません。
1.まず、個別のスコープ(閉鎖)を作成する必要があります。
function () {
}
2.この領域では、私たちは好きなことをすることができます。そして、誰もそれについて知りません。
function () {
var name,
secretSkills = {
pizza: function () { return new Pizza() },
sushi: function () { return new Sushi() }
}
function Restaurant(_name) {
name = _name
}
Restaurant.prototype.getFood = function (name) {
return name in secretSkills ? secretSkills[name]() : null
}
}
3.世界が私たちのレストランクラスについて知るためには、閉鎖からそれを返さなければなりません。
var Restaurant = (function () {
// Restaurant definition
return Restaurant
})()
4.最後に、次のようにします。
var Restaurant = (function () {
var name,
secretSkills = {
pizza: function () { return new Pizza() },
sushi: function () { return new Sushi() }
}
function Restaurant(_name) {
name = _name
}
Restaurant.prototype.getFood = function (name) {
return name in secretSkills ? secretSkills[name]() : null
}
return Restaurant
})()
5.また、このアプローチには継承とテンプレート化の可能性があります
// Abstract class
function AbstractRestaurant(skills) {
var name
function Restaurant(_name) {
name = _name
}
Restaurant.prototype.getFood = function (name) {
return skills && name in skills ? skills[name]() : null
}
return Restaurant
}
// Concrete classes
SushiRestaurant = AbstractRestaurant({
sushi: function() { return new Sushi() }
})
PizzaRestaurant = AbstractRestaurant({
pizza: function() { return new Pizza() }
})
var r1 = new SushiRestaurant('Yo! Sushi'),
r2 = new PizzaRestaurant('Dominos Pizza')
r1.getFood('sushi')
r2.getFood('pizza')
これが誰かがこの主題をよりよく理解するのに役立つことを願っています