JavaScript中对象内的对象

时间:2014-07-24 01:21:39

标签: javascript

我正在尝试为我的某个网站设置常量文件。我正在尝试设置它,以便在需要时可以获得字符串常量。

到目前为止我所拥有的(不工作,有点像C#ish)

var Constants = new SiteConstants();

function SiteConstants()
{
    this.Training = function Training()
    {
        this.Staff = function Staff()
        {
            this.fetch = "someurl";
        }
    }
}

console.log(Constants.Training().Staff().fetch); //Fail - what i want to call
//or something similar like Constants.Training.Staff.fetch
console.log((new Constants.Staff()).fetch); //Success

这是否可以在JavaScript中使用,如果没有,有人可以建议替代方案吗?

5 个答案:

答案 0 :(得分:4)

为此必须使用对象而不是函数。

var Constants = {
    Training: {
        Staff: {
            fetch: "someurl"
        }
    }
};

答案 1 :(得分:2)

尝试正确定义每个构造函数。

function SiteConstants()
{
  this.training = new Training();
}

function Training()
{
  this.staff = new Staff();
}

function Staff()
{
  this.fetch = "someurl";
}

或者您也可以这样做:

function SiteConstants()
{
    function Training()
    {
        function Staff()
        {
            this.fetch = "someurl";
        }

        this.Staff = new Staff();
    }

    this.Training = new Training();
}

答案 2 :(得分:2)

我建议采用完全不同的方法;一个更适合JavaScript的东西:JSON。

{
    "siteConstants" : {
        "training" : {
            "staff" : {
                "fetch" : "someurl"
            }
        } 
    }
}

然后,如果您将此对象附加到var constantsObject,则可以访问常量:

constantsObject.siteConstants.training.staff.fetch;    // returns "someurl"
constantsObject["siteConstants"]["training"]["staff"]["fetch"] // returns "someurl"

答案 3 :(得分:1)

您将Training定义为构造函数,但从未实际调用它。你想要的是:

function SiteConstants()
{
    var Training = function Training() //constructor
    {
        this.Staff = function Staff()
        {
            this.fetch = "someurl";
        }
    }
    this.Training = new Training();
}

对于内部阶级来说等等。

答案 4 :(得分:1)

你需要像这样创建一个新对象

var Obj = new Constants.Training();

然后您需要调用职员Staff和console.log Obj.fetch

Obj.Staff();
console.log(Obj.fetch);

或者你可以这样做

function SiteConstants()
{
    this.Training = function Training()
    {
        this.Staff = function Staff()
        {
            this.fetch = "someurl";
        }
    }
}
var Constants = new SiteConstants();
Constants.Training = new Constants.Training();
Constants.Training.Staff();
console.log(Constants.Training.fetch);