0

我一直在编写 JS 代码,但我从未做过任何面向对象的事情。我通常只是在顶部定义所有变量,然后全部使用它们。我一遍又一遍地听到要使用 OO,但现在我不能做我想做的事,也得不到任何帮助。

这是一个小提琴,以及半相同的代码:

http://jsfiddle.net/zDeAJ/1/

var App = {
    options: {

        /* ------------------------------------
             Options (PREFERABLY DONT CHANGE)
        --------------------------------------- */

        baseDomain     : 'google.com',
        apiVersion     : '/api/v1'

    },
    state: {

        current: App.options.baseDomain + App.options.apiVersion

    }
}

所以做 App.options.baseDomain(或 this.options.baseDomain)对我不起作用。如果我不能基于它们定义其他应用程序级别值,那么定义应用程序级别变量有什么用处?我知道这是一个模糊的问题,但我真的不知道我在问什么......我只是有一个问题,我很容易用一堆变量来完成,这些变量不仅包含设置,还包含状态在我的应用程序中,以我对 Javascript OO 模式的了解并不容易......编辑:好的,这就是我想要做的:

http://i.imgur.com/ak5YD.png

但我不知道这些限制......所以我需要一种解决方法,它尽可能接近和优雅地实现这个实现。

4

5 回答 5

0

你的问题很笼统;您应该更具体地说明您要完成的工作。

除此之外,请阅读有关对象的文档;

取自w3schools:

使用 JavaScript,您可以定义和创建自己的对象。

创建新对象有两种不同的方法:

1. Define and create a direct instance of an object.
2. Use a function to define an object, then create new object instances.

方式一:

personObj=new Object();
personObj.firstname="John";
personObj.lastname="Doe";
personObj.age=50;
personObj.eyecolor="blue";

方式二:

function person(firstname,lastname,age,eyecolor)
{
    this.firstname=firstname;
    this.lastname=lastname;
    this.age=age;
    this.eyecolor=eyecolor;

    this.changeName=changeName;
    function changeName(name) {
        this.lastname=name;
    }
}
于 2012-09-20T18:46:23.293 回答
0

JavaScript 是一种解释型语言。这意味着您的代码是从内向外评估的,或者最内部的表达式被评估并传递给下一个外部表达式。

在您的示例中,options首先评估 get 的值,然后评估state. 问题是您无法App在完全评估之前访问关联数组 ,而在评估 的值期间并非如此state

EDITED

抱歉没有正确回答。这是您的第二个改进的方法:

var App = {
    options: {

        /* ------------------------------------
             Options (PREFERABLY DONT CHANGE)
        --------------------------------------- */

        baseDomain     : 'google.com',
        apiVersion     : '/api/v1',
        blah: ''

    },
    blah: function(){

        return App.options.baseDomain + App.options.apiVersion;

    }
}

console.log(App.blah());
于 2012-09-20T18:48:59.447 回答
0

你们中没有一个人回答我的问题....我考虑了一下...我可以在文字中使用命名函数来访问它...如果我愿意(不必要),我什至可以将其分配回去到选项对象

http://jsfiddle.net/zDeAJ/9/

var App = {
    options: {

        /* ------------------------------------
             Options (PREFERABLY DONT CHANGE)
        --------------------------------------- */

        baseDomain     : 'google.com',
        apiVersion     : '/api/v1',
        blah: ''

    },
    state: function(){

        this.options.blah = this.options.baseDomain + this.options.apiVersion;

    }
}

App.state();
console.log(App.options.blah);

​</p>

于 2012-09-20T19:17:30.813 回答
0

您可以将您的方法视为创建一个名为 App 的“实例”对象。

这是一种略有不同的方法。

function App () {
    // Save a reference to the object
    var that = this;

    that.options = {
        baseDomain: "google.com",
        apiVersion: "/api/v1"
    };

    that.state = {
        current: that.options.baseDomain + that.options.apiVersion
    };
}

var myApp = new App();
// Write the current state to the screen
document.write(myApp.state.current);

这是 JSFiddle:http: //jsfiddle.net/zDeAJ/1/

希望这可以帮助!

于 2012-09-20T18:38:19.973 回答
0

您可以执行以下操作(在 JavaScript 中,函数是对象):

function App () {
    // Save a reference to the object
    this.options = {
        baseDomain: "google.com",
        apiVersion: "/api/v1"
    };

    this.state = {
        current: this.options.baseDomain + this.options.apiVersion
    };
}

var myApp = new App();
console.log(myApp);
于 2012-09-20T18:41:15.430 回答