如果我必须在C#中创建一个域模型对象,我可能会这样做:
public class Person
{
Public string Name { get; set; }
Public string Gender { get; set; }
Public int Age { get; set; }
}
在Javascript中,定义这些对象的惯例是什么?我在想这样的事情:
NAMESPACE.Person = function() {
this.name = "";
this.gender = "";
this.age = 0;
}
答案 0 :(得分:3)
是的,基本上可以看到。唯一要补充的是你应该原型方法。你如何将原型设计为设计,我通常更愿意在内部对类进行此操作,但标记为只在需要时才运行,并且只运行一次。
NAMESPACE.Person = function() {
this.name = "";
this.gender = "";
this.age = 0;
if(!NAMESPACE.Person._prototyped)
{
NAMESPACE.Person.prototype.MethodA = function () {};
NAMESPACE.Person.prototype.MethodB = function () {};
NAMESPACE.Person.prototype.MethodC = function () {};
NAMESPACE.Person._prototyped = true;
}
}
解释原因:原因是性能和继承。原型属性直接与类(函数)对象相关联,而不是与实例相关联,因此它们可以单独从函数引用遍历。因为它们在类中,所以只需要存在一个对象,而不是每个实例一个。
答案 1 :(得分:0)
我认为没有太多的“惯例”,但你可以声明“私人”变量,Crockford会告诉你如何here
function Constructor(...) { var that = this; var membername = value; function membername(...) {...} }
注意:函数语句
function membername(...) {...}
是
的简写var membername = function membername(...) {...};
为了完善答案,你会这样做,你会注意到我做的有点不同
// class
function Person()
{
// private variable
var name = "Default Value";
// getter
this.getName = function()
{
return name;
}
// setter
this.setName = function(s)
{
name = s;
}
}
// instanciate an object
var p = new Person();
// alerts: Default Value
alert(p.getName());
p.setName("def");
// alerts: def
alert(p.getName());
// alerts: undefined
alert(p.name);