【问题标题】:How to reference properties of current object in JS [duplicate]如何在JS中引用当前对象的属性[重复]
【发布时间】:2012-12-11 15:37:15
【问题描述】:

可能重复:
Self-references in object literal declarations

我在 JS 中有一些简单的对象,比如这个例子:

var object = {
 firstname : 'john',
 lastname : 'paul',
 wholename : firstname + lastname
}

这个简单的东西行不通; john 和 paul 在全名中未定义,因此我尝试使用“this”运算符,该运算符仅在我执行函数 (getWholeName(){return this.firstname+this.lastname} ) 时才有效。 但是如果我想使用变量而不是函数,我该怎么办?我也试过object.firstname + object.lastname,但它不起作用。

【问题讨论】:

    标签: javascript object


    【解决方案1】:

    没有办法引用对象,但是可以动态添加属性:

    var object = { 
        firstname : 'john', 
        lastname : 'paul'
    };
    
    object.wholename = object.firstname + object.lastname;
    

    编辑:

    为什么不把它包装在一个函数中呢?

    var makePerson = function (firstname, lastname) {
        return {
            firstname: firstname,
            lastname: lastname,
            wholename: firstname + lastname  // refers to the parameters
        };
    };
    
    var object = makePerson('john', 'paul');
    

    【讨论】:

    • 好的,谢谢。我这样做的原因是我试图在我正在构建的一个巨大的网络应用程序中拥有一个组织良好的代码;所以我决定在这样的对象中重新组合类似的函数和变量。这是正确的做法吗?我知道 TypeScript 和 Modules,但我需要使用 TS 来实现像函数/变量组这样简单的事情吗?
    • @user1397271 你可以在纯 JS 中做到这一点:尝试引入命名空间(如 var MYAPP = { }; MYAPP.data = ...)并尝试将大函数分解为更小的函数。考虑使用模块模式:adequatelygood.com/2010/3/JavaScript-Module-Pattern-In-Depth
    • 当你说像 var MYAPP = {} 这样的命名空间时,这意味着它与我的 var object = {} 示例相同,所以我会遇到我要问的问题吗?
    • @user1397271 是的,如果您需要同时引用您正在定义的东西,它会。但图书馆可以提供帮助,即github.com/fabiooshiro/namespace-jselegantcode.com/2011/01/26/basic-javascript-part-8-namespaces
    【解决方案2】:

    在 Javascript 中,每个函数都是一个对象。您应该将 Object 的构造函数声明为这样的函数:

    function person(firstname,lastname)
    {
    this.firstname=firstname;
    this.lastname=lastname;
    
    this.wholeName=wholeName;
    
     //this will work but is not recommended.
     function wholeName()
     {
     return this.firstname+this.lastname;
     }
    }
    

    你也可以通过原型化来为你的对象添加额外的方法,这是推荐的做事方式。更多信息在这里:

    http://www.javascriptkit.com/javatutors/proto.shtml

    【讨论】:

    • 如果一切都是函数...这是什么 => var obj={1:1,2:2}?
    • 你是对的,但是每个函数都是一个对象。我正是这个意思。我的立场是正确的:)
    • 你是从 w3schools 或其他网站上抄下来的吗?
    猜你喜欢
    • 1970-01-01
    • 2019-12-01
    • 2021-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-24
    相关资源
    最近更新 更多