我想为我的javascript对象编写一个属性浏览器(如.NET propertygrid),但作为一个新的javascript开发人员,我不确定在javascript中管理属性等的最佳方法是什么。
作为C#开发人员,我可以使用
之类的属性[Category("My Properties")]
[Description("Simple Properties")]
[DisplayName("MyText")]
public string SomeText
{
get { return someText; }
set { someText = value; }
}
所以我的属性浏览器知道关于我的类的属性的必要信息。 了解房产类型也很重要。例如,如果属性类型为date,则属性浏览器应显示日期选择器。
我的第一个想法是使用变量名称。
this.date_StartDate
this.int_Length
然后属性网格可以切断名称的第一部分并显示 StartDate作为datetime属性和 长度为整数属性。
如果有更好的方法,请告诉我。
答案 0 :(得分:1)
没有真正的“最佳”方式,尽管我建议不要使用变量名来表示类型。
如果您需要支持自定义类型,例如颜色,我会采用以下方法:
我的方法是自己为所有对象添加一个类型,作为属性:
var date = {
value: "31/01/2015",
type: "date"
};
你也可以添加一个类型对象,作为一种枚举,这样你就不会在任何时候拼错你的类型。
var types = {
date: "date",
number: "number"
};
只要您使用本机JavaScript类型(如数字,字符串,日期等),就不需要这样做。
在我自己的属性浏览器实验中,我只是使用typeof来确定对象的类型。 JavaScript只有一些基本类型(数组,未定义,字符串,数字,布尔值和函数),但是,有一个隐藏属性可用于将RegEx或日期与对象分开。
// this function was taken from https://javascriptweblog.wordpress.com/2011/08/08/fixing-the-javascript-typeof-operator/
function toType(obj) {
return ({}).toString.call(obj).match(/\s([a-zA-Z]+)/)[1].toLowerCase();
}
typeof /aregex/ === "object" // true
typeof new Date() === "object" // true
toType(/aregex/) === "regexp" // true
toType(new Date()) === "date" // true
要获得更多灵感,您可以查看my experimental property browser,它支持数字,对象,布尔值和函数。
由于我无法准确回答您的问题,我希望这些一般信息可以帮助您找到答案。