“类”常量和构造函数:如何实现?
我想有这样的事情在javasript实现请:“类”常量和构造函数:如何实现?
var hat = new Hat(Hat.Color.RED, Hat.Size.MEDIUM);
我怎么能做到这一点,请(想招惹功能prototype
但有一点成功)?
Hat
将是一个构造函数:
function Hat(color, size) {
this.id = "X"+color+size; // or anything else
}
在原型上是“m编制方法”为Hat
实例:
Hat.prototype.raise = function() {
...
};
但常数是函数对象的属性:
Hat.Color = {
RED: "F00",
GREEN: "0F0",
...
};
Hat.Size = {
MEDIUM: 0,
LARGE: 1,
...
};
如果你的库实现了‘正确的扩展’功能(没有什么特别的构造函数),这也应该工作:
Object.extend(Hat, {
Color: {RED: "F00", GREEN: "0F0", ...},
Size: = {MEDIUM: 0, LARGE: 1, ...},
});
你可以做,如果你创建一个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.Color'等**必须在声明'function Hat'后声明?另外,函数可以通过'var Hat = function(){...};''语句来声明吗? – BreakPhreak 2012-07-10 07:37:58
@BreakPhreak你可以使用'function Hat(){}'或者'var Hat = function()'。使用第一个将允许您在声明'Hat'之前或之后声明'Hat.Color',因为'Hat'被挂起。如果你使用第二个,'Hat.Color' **必须在'Hat'之后声明。 – 2012-07-10 07:40:13
这是功能的继承方式。它区分私有和公共方法和变量。
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
}
...但他想要一个静态变量。 – Bergi 2012-07-10 08:33:54
非常有趣('extend')!如果我可能会有一个搭载问题:为什么我不能写'Hat.prototype.Color = {...}'? – BreakPhreak 2012-07-10 07:51:16
这意味着所有的Hat实例都会继承该Color属性。您将无法将它们用作构造函数参数。 – Bergi 2012-07-10 07:55:48
btw,你可能是指'jQuery.extend()',对吧? – BreakPhreak 2012-07-10 07:56:59