簡體   English   中英

如何訪問靜態對象的父成員?

[英]How can access static object parent member?

我有一個對象作為myObject,我想在myObject.bcc3函數中訪問parents成員,

以下是我的示例:

var myObject = {
    a: {
        a1: 1,
        a2: 2
    },
    b: {
        b1: 3,
        b2: 4,
        c: {
            c1: 5,
            c2: 6,
            c3: function() {
                //how can here access a.a1, a.a2, b.b1 and b.b2,??
                //not use myObject.a.a1, myObject.a.a2, myObject.b.b1....etc
                //can like to use this.parent.parent.a.a1??
            }
        }
    }
}

任何想法?

為什么不更改構造對象的方式?

function getObject() {
    var result = {
        a: {
           a1: 1,
           a2: 2
        },
        b: {
           b1: 3,
           b2: 4,
           c: {
               c1: 5,
               c2: 6
           }
        }
     };

    result.b.c.c3 = (function(parent) {
        var myA1 = parent.a.a1;
        var myA2 = parent.a.a2;
        var myB1 = parent.b.b1;
        var myB2 = parent.b.b2;
        //and so on
    })(result);

    return result;
}

然后var myObject = getObject();

c3為正在構造的對象創建了一個閉合。 它具有對a.a1,a.a2等的完全訪問權限。

var myObject = {
    a: {
        a1: 1,
        a2: 2
    },
    b: {
        b1: 3,
        b2: 4,
        c: {
            c1: 5,
            c2: 6,
            c3: function() {
                alert("this.parent.parent.a.a1 is " + this.parent.parent.a.a1);
            }
        }
    },
    init: function(obj, flag) {
        if (!obj) obj = this;
        for (var prop in obj) {
            if (typeof obj[prop] == "object" && prop != "parent") {
                obj[prop].parent = obj;
                arguments.callee(obj[prop], true);
            }
        }
        if (!flag) {
            delete this.init;
            return this;
        }
    }
}.init();

然后,您必須調用myObject.bcc3();
完成。

函數內部必須將其他對象屬性稱為靜態標識符,並且不能以相對方式引用它們。 但是,如果您創建方法以遍歷對象文字的屬性並將這些方法綁定為對象原型的屬性,則此更改可能會有所更改。

在這些情況下,通常的策略是對模塊模式使用閉包,並對關系使用范圍鏈。

一個對象不知道,也沒有方法可以發現創建它的結構。 創建對象結構的方法有很多,單個對象可以屬於許多結構,因此“父對象”的概念不可靠。

使用方法不是解決方案,因為函數的屬性是通過調用設置的,因此無法通過函數的創建方式進行設置(ES5 bind除外)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM