function Something(pallet, colors) {
var myColors = colors;
var myPallet = pallet;
function getColors() {
for (var i = 0; i < myColors.length; i++) {
document.write(myColors[i] + "<br />");
}
}
return {
getColors: getColors
};
}
var mySomething = new Something('myNewPallet', ['green', 'red', 'blue']);
mySomething.getColors();
さて、ここで行っていることは、クロージャを作成してから、something オブジェクトをインスタンス化する人に getColors 関数を返すことです。閉鎖についてはこちらとこちらで読むことができます。ただし、基本的には、色とパレットのメンバーを「閉じて」おり、something() のコンテキスト内に getColors が存在するため、something のすべてのメンバーにアクセスできます。次に、その関数を呼び出し元に戻すことで、パレットとカラー リストを「キャプチャ」したオブジェクトを使用してその機能を呼び出すことができます。
これは、一般的なクロージャーと、具体的には明らかにするモジュール パターンの非常に高レベルのビューであったことに注意してください。私が含めたリンクを読んで、JSFiddle で作成したこのフィドルをいじってください。頭に入れたらきっと喜ばれると思います。
Pallet オブジェクトを作成しようとしているようですので、新しいフィドルを作成しました。
コードは次のとおりです。
function Pallet(palletName, palletColors) {
this.name = palletName; //name is now a property of Pallet
this.colors = palletColors; //colors is now a property of Pallet
}
Pallet.prototype.getColor = function(color) {
//access Pallet properties using the 'this' keyword
//ex. this.colors or this.name
if (this.colors.indexOf(color) > -1) {
return 'Color found'; //Or whatever you need to do.
}
return 'Color not found'; //Or whatever you need to do.
};
var myPallet = new Pallet('myNewPallet', ['green', 'red', 'blue']);
document.write(myPallet.getColor('red')); //using document.write for simplicity