我想有這樣的事情在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.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