"类"常量和构造函数:如何实现?

Bre*_*eak 1 javascript

我想在javasript中实现类似的东西,请:

var hat = new Hat(Hat.Color.RED, Hat.Size.MEDIUM);
Run Code Online (Sandbox Code Playgroud)

我怎么能这样做(试图弄乱功能,prototype但有一点成功)?

Pet*_*son 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
}
Run Code Online (Sandbox Code Playgroud)

然后,您可以创建new Hat并获取其属性

var hat = new Hat(Hat.Color.RED, Hat.Size.MEDIUM);
var hatColor = hat.color; // "#F00"
Run Code Online (Sandbox Code Playgroud)


Ber*_*rgi 5

Hat 将是一个构造函数:

function Hat(color, size) {
    this.id = "X"+color+size; // or anything else
}
Run Code Online (Sandbox Code Playgroud)

在原型上是Hat实例的"方法" :

Hat.prototype.raise = function() {
    ...
};
Run Code Online (Sandbox Code Playgroud)

但常量是Function对象的属性:

Hat.Color = {
    RED: "F00",
    GREEN: "0F0",
    ...
};
Hat.Size = {
    MEDIUM: 0,
    LARGE: 1,
    ...
};
Run Code Online (Sandbox Code Playgroud)

如果你的库正确地实现了"extend"函数(在构造函数上没有什么特别之处),那么这也应该有效:

Object.extend(Hat, {
    Color: {RED: "F00", GREEN: "0F0", ...},
    Size: = {MEDIUM: 0, LARGE: 1, ...},
});
Run Code Online (Sandbox Code Playgroud)