问题描述
如果我必须在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;
}
1楼
是的,基本上发现。 唯一要添加的是你应该对方法进行原型设计 。 你如何将原型设计为设计,我通常更喜欢在内部对类进行此操作,但标记为只在需要时运行,并且只运行一次。
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;
}
}
解释原因:原因是性能和继承。 原型属性直接与类(函数)对象相关联,而不是与实例相关联,因此它们可以单独从函数引用遍历。 因为它们在类中,所以只需要存在一个对象,而不是每个实例一个。
2楼
我不认为有很多“惯例”,但你可以声明“私人”变量,Crockford告诉你如何到
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);