このようなものをjavasriptに実装したいと思います:
var hat = new Hat(Hat.Color.RED, Hat.Size.MEDIUM);
どうすればいいですか(関数を台無しにしようとしましprototype
たが、少し成功しました)?
このようなものをjavasriptに実装したいと思います:
var hat = new Hat(Hat.Color.RED, Hat.Size.MEDIUM);
どうすればいいですか(関数を台無しにしようとしましprototype
たが、少し成功しました)?
Hat
次のようなコンストラクター関数を作成すると、これを行うことができます。
function Hat(color, size) {
this.color = color;
this.size = size;
}
Hat.Color = {
RED: "#F00",
GREEN: "#0F0",
BLUE: "#00F"
};
Hat.Size = {
SMALL: 0,
MEDIUM: 1,
LARGE: 2
}
次に、を作成しnew Hat
てそのプロパティを取得できます
var hat = new Hat(Hat.Color.RED, Hat.Size.MEDIUM);
var hatColor = hat.color; // "#F00"
Hat
コンストラクター関数になります:
function Hat(color, size) {
this.id = "X"+color+size; // or anything else
}
プロトタイプには、Hat
インスタンスの「メソッド」があります。
Hat.prototype.raise = function() {
...
};
ただし、定数はFunctionオブジェクトのプロパティです。
Hat.Color = {
RED: "F00",
GREEN: "0F0",
...
};
Hat.Size = {
MEDIUM: 0,
LARGE: 1,
...
};
ライブラリが「extend」関数を正しく実装している場合(コンストラクターに特別なことは何もありません)、これも機能するはずです。
Object.extend(Hat, {
Color: {RED: "F00", GREEN: "0F0", ...},
Size: = {MEDIUM: 0, LARGE: 1, ...},
});
これが機能継承の方法です。プライベートとパブリックのメソッドと変数を区別します。
var Hat = function (color, size) {
var that = {};
that.Color = { RED: 'abc'}; // object containing all colors
that.Size = { Medium: 'big'}; // object containing all sizes
that.print = function () {
//I am a public method
};
// private methods can be defined here.
// public methods can be appended to that.
return that; // will return that i.e. all public methods and variables
}