簡體   English   中英

對象屬性如何在沒有方法的情況下彼此“交談”?

[英]How can object properties 'talk' to each other without a method?

我知道,一旦一個函數被調用的背景下, this改變的對象,但我怎么可以模擬這種情況下,而無需創建一個方法?

var object = {
    x: 1,
    y: object.x,       // will NOT work
    z: function () {
        return this.x  // works fine
    }
}
console.log(object.z())

問題是創建y時, object尚不存在。 它仍在創建中。 當您實際調用object.z() ,該對象已經創建並且可以工作。

編輯:您可以做這樣的事情,為對象創建一個構造函數:

 function getObject(){ this.x=1; this.y=this.x; return this; } var object = getObject(); alert(object.y) 

或者,如果您在編寫代碼時知道該值是什么,請執行以下操作:

 var object = { x: 1, y: 1, } alert(object.y) 

首先創建變量。 如果您在創建對象時知道x應該是什么,而不是在編寫代碼時就知道了,這可能就是您想要的。

 var one=1; var object = { x: one, y: one, } alert(object.y); 

所有這些將把1放入y。

您也可以嘗試一下。 如果兩個值相同,為什么需要兩個? (也許他們會獨立改變嗎?我不知道會在哪里發生,但是有可能)

 var object={ x: 1 } alert(object.x); 

我不確定您要問什么,但讓我介紹一下getter函數。 喜歡

var object = {
    x: 1,
    get y() {
        return this.x;
    },
    z: function () {
        return this.x  // works fine
    }
}
console.log(object.y); // 1

這樣的方法仍然是一個函數,但其​​行為類似於屬性。 也許這會對您有任何幫助。 話雖這么說,但是Java語言中沒有方法,或更確切地說,沒有語法可以以提議的方式訪問對象屬性。

簡短的回答是“你不能。” 您有幾種選擇。 第一種是預先存儲您希望使用的任何值(為簡便起見,在這些示例中我省略了z ):

var x = 1;
var object = {
    x: x,
    y: x,
};

第二種是等待對象構造之后(這是我通常要做的),然后分配屬性,因為對象是可變的:

var object = {
    x: 1
};
object.y = object.x;

第三是創建對象構造函數並在其中進行分配:

function MyObject() {
    this.x = 1;
    this.y = this.x;
}
var object = new MyObject();

暫無
暫無

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

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