2017-08-11 34 views
0

我有一些問題,我的包裹圍繞對象實例化和在JavaScript範圍頭的屬性值的實例化...Javascript對象。一個對象作爲對象

查看本示例代碼:

someOtherObj = { 
    aMethod: function() { 
    $('body').append('aMethod successfully called!<br>'); 
    return 'd'; 
    } 
} 

// THIS WORKS!! 
$('body').append(someOtherObj.aMethod() + '<br>'); 

someObj = { 
    aValue: 'a', 
    bValue: 'b', 
    cValue: this.aValue,    // THIS DOESN'T WORK!! 
    dValue: new someOtherObj(),  // THIS DOESN'T WORK!! 
    eValue: { 
    fValue: aValue,     // THIS DOESN'T WORK!! 
    gValue: this.aValue,   // THIS DOESN'T WORK!! 
    hValue: someObj.aValue,   // THIS DOESN'T WORK!! 
    }, 
}; 

// JavaScript crashes out before this, but... 
// This should result in: 'a' 
$('body').append(someObj.cValue + '<br>'); 

// This should result in: 'd' 
$('body').append(someObj.dValue.aMethod() + '<br>'); 

// These should result in: 'a' 
$('body').append(someObj.eValue.fValue + '<br>'); 
$('body').append(someObj.eValue.gValue + '<br>'); 
$('body').append(someObj.eValue.hValue + '<br>'); 

我覺得評論是相當自我解釋......但他這樣說:

  1. 我怎樣才能讓cValue參考===aValue,和/或具有相同的值(==)作爲aValue
  2. 我該如何實例化作爲另一個對象的屬性的新對象?
  3. 如何訪問包含對象的屬性?
+0

你不能指代對象字面內的在建對象。 – Pointy

+0

[JavaScript關閉如何工作?]的可能重複(https://stackoverflow.com/questions/111102/how-do-javascript-closures-work) –

回答

2

我怎樣才能讓cValue引用(===aValue,和/或具有相同的值(==)爲aValue

你不能(除了只使用相同的值來初始化它,例如cValue: 'a');更多這裏:Self references in object literal declarations

或者,你可以做cValue一個吸氣返回aValue,雖然有在這種情況下,小點:

var obj = { 
 
    aValue: 42, 
 
    get cValue() { 
 
     return this.aValue; 
 
    } 
 
}; 
 
console.log(obj.cValue); // 42 
 
obj.aValue = 67; 
 
console.log(obj.cValue); // 67

我如何實例化一個新的對象作爲另一個對象的屬性?

你這樣做的方式。你在做什麼(new someOtherObj())的問題是someOtherObj對象,而不是構造函數。 (構造函數是對象,但大多數對象不是構造函數。)

這是一個構造函數:

function Example() { 
    this.someProperty = "some value"; // This bit is optional; it's here to 
             // emphasize that constructors initialize 
             // the contents of the new object 
} 

所以是這樣的,通過ES2015 class語法:

class Example { 
    constructor() { 
     this.someProperty = "some value"; // Again, this bit is optional 
    } 
} 

在這兩種情況下,這個作品:

var obj { 
    example: new Example() 
}; 
console.log(example.someProperty); // "some value" 

如何訪問包含對象的屬性?

通過this,如果這是運行的代碼被稱爲在設置this對象的方式。例如:

var obj = { 
    answer: 42, 
    doSomething: function() { 
     console.log(this.answer); 
    } 
}; 
obj.doSomething(); // 42 

看到這些問題進行解答:

或者在一維的情況下通過使用它們被分配的變量的名稱來關閉這樣的對象:

var obj = { 
    answer: 42, 
    doSomething: function() { 
     console.log(obj.answer); // <== Only change is here 
    } 
}; 
obj.doSomething(); // 42 
相關問題