1

このような JavaScript オブジェクトを作成することに手を出したことはありませんが、それには十分な理由があると思います。

これが私の例です:

x = new Something(pallet,['blue','green','orange']);
x.try(['blue']);

2つの変数パレットとcolors配列を設定するオブジェクトを作りたいです。

次に、try関数で配列を渡したいのですが、関数でアクセスしたいのですがpallet、色オブジェクト。これが可能かどうか誰かに教えてもらえますか?おそらく、ちょっとしたデモやチュートリアルですか?

4

3 に答える 3

1
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
于 2012-11-11T05:24:39.273 に答える
1
var Something = function( pallet, colors){
    this.try = function(arr){
        //stuff
    }
};

これはコンストラクター関数であり、説明どおりに使用できます。試してみると、パレットと色にアクセスできます。ただし、コメントで述べたように、try は予約語であるため、優れたメソッド名ではありません。

于 2012-11-11T04:42:05.630 に答える
-1

使用は避けてくださいnew-- 私の経験では、ファクトリ メソッドの方が堅牢であることがわかりました。たとえば、これを行うことで、求めていることを達成できます。

function Something(pallet, colors) {
    var that = {};

    that.foo = function (moreColors) {
        // Here you can access pallet, colors, and moreColors.
        // Use "that" to refer to the current object, not "this".
    };

    return that;
}

x = Something(somePallet, ['blue', 'green', 'orange']);
x.foo(['blue']);
于 2012-11-11T04:07:40.733 に答える