4

如果我必须在 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;
}
4

2 回答 2

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; 
    }
}

解释原因:原因是性能和继承。原型属性直接与类(函数)对象而不是实例相关联,因此它们可以单独从函数引用中遍历。而且因为它们在类上,所以只需要存在一个对象,而不是每个实例一个。

于 2009-02-13T16:52:14.357 回答
0

我认为没有太多的“约定”,但您可以声明“私有”变量,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);
于 2009-02-13T16:51:50.473 回答