Javascript 在以面向对象的方式实现我的应用程序时遇到问题

Javascript 在以面向对象的方式实现我的应用程序时遇到问题,javascript,Javascript,我编写JS已经有一段时间了,但我从未做过任何面向对象的事情。我通常只是在顶部定义所有变量,然后全部使用。我不断听到使用OO的声音,但现在我不能做我想做的事,也得不到任何帮助 这是一把小提琴,还有半相同的代码: 因此,执行App.options.baseDomain(或this.options.baseDomain)对我不起作用。如果不能基于应用程序级变量定义其他应用程序级值,那么定义应用程序级变量有什么用处?我知道这是一个模糊的问题,但我真的不知道我在问什么。。。我只是有一个问题,在我掌握Ja

我编写JS已经有一段时间了,但我从未做过任何面向对象的事情。我通常只是在顶部定义所有变量,然后全部使用。我不断听到使用OO的声音,但现在我不能做我想做的事,也得不到任何帮助

这是一把小提琴,还有半相同的代码:

因此,执行App.options.baseDomain(或this.options.baseDomain)对我不起作用。如果不能基于应用程序级变量定义其他应用程序级值,那么定义应用程序级变量有什么用处?我知道这是一个模糊的问题,但我真的不知道我在问什么。。。我只是有一个问题,在我掌握Javascript OO模式的知识后,我很难用一堆不仅包含设置,而且包含应用程序中的状态的变量来轻松完成。。。。 ​ 编辑:好的,这就是我想要做的:


但是我没有意识到它的局限性。。。因此,我需要一种方法来解决这个问题,它尽可能地贴近和优雅地实现这个实现。

您可以将您的方法想象为创建一个名为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);
以下是JSFIDLE:


希望这有帮助

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


你的问题很笼统;你应该更具体地说明你想要完成什么

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

取自

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

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

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

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

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

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

在您的示例中,
options
get的值首先计算,然后是
state
的值。问题在于,在对
App
的关联数组进行完全计算之前,您无法访问该数组,而在对
state
的值进行计算时,情况并非如此

已编辑

抱歉没有正确回答。以下是您的第二份报告中的一个改进方法:

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());

你们没有一个人回答我的问题。。。。我想了一下。。。我可以在文本中使用命名函数来访问它。。。如果我需要(不需要),我甚至可以将其分配回options对象


使用对象的深度嵌套属性并不能使您的代码面向对象。。。想象一下App.options.baseDomain就是这个.options.baseDomain。。并且是一个构造函数。要做到这一点,我需要解决这个问题,否则它对我来说毫无意义。检查我的原始问题,了解我正在尝试做什么。现在我不能再这样做了。选项。baseDomain就像我在评论中说的那样。。。对不起,请检查我添加到问题中的图像以进一步澄清。如果可能的话,我希望仍然使用对象。。。查看我的问题以了解最新的详细信息。我想是的,但我想知道另一种选择。
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;
    }
}
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());
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);