当前位置: 代码迷 >> JavaScript >> Javascript域模型对象的约定
  详细解决方案

Javascript域模型对象的约定

热度:17   发布时间:2023-06-12 14:05:01.0

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

是的,基本上发现。 唯一要添加的是你应该对方法进行原型设计 你如何将原型设计为设计,我通常更喜欢在内部对类进行此操作,但标记为只在需要时运行,并且只运行一次。

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

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

我不认为有很多“惯例”,但你可以声明“私人”变量,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);
  相关解决方案