1

このようなものをjavasriptに実装したいと思います:

var hat = new Hat(Hat.Color.RED, Hat.Size.MEDIUM);

どうすればいいですか(関数を台無しにしようとしましprototypeたが、少し成功しました)?

4

3 に答える 3

6

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"
于 2012-07-10T07:35:55.873 に答える
5

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, ...},
});
于 2012-07-10T07:36:10.710 に答える
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
}
于 2012-07-10T07:45:46.763 に答える