2012-10-28 63 views
2

屬性在JavaScript函數,屬於一個JavaScript對象,我想使用另一個對象的屬性值:訪問其他對象在javascript

var firstObject={ 
    says:"something" 
} 

var secondObject={ 
    speak:function(){console.log(this.saysToo)}, 
    saysToo:firstObject.says 
} 

secondObject.speak(); 

在我在調試器中檢查「secondObject」 「說兩句」具有正確的價值。但是,如果我嘗試通過「this.saysToo」訪問它,它是未定義的。

如何從第二個對象中訪問第一個對象的屬性?

+2

我沒有得到undefined。你使用什麼瀏覽器?另外,請發佈輸出。 – jmort253

+1

[適用於我。](http://jsfiddle.net/csBXN/) –

+0

這是您真實的實際代碼嗎? – jmort253

回答

3

firstObjectsecondObject是單獨的對象。關鍵字this引用其執行上下文的對象。

<script> 
var firstObject = { 
    says: "something", 
    test: function() { 
     //this == firstObject 
     console.log(this == firstObject); //shows: true 
    } 
} 

var secondObject = { 
    speak: function() { 
     //this == secondObject 
     console.log(this.saysToo); 
    }, 
    saysToo: firstObject.says, 
    test: function() { 
     //this == secondObject 
     console.log(this == secondObject); //shows: true 
     console.log(this == firstObject); //shows: false 
    }, 
} 

secondObject.speak(); 

//this == window 
console.log(this===window); //shows: true 

console.log(typeof this.saysToo); //shows: undefined 
//because "this.saysToo" is same as "window.saysToo" in this (global) context 
</script> 

函數調用可以使用方法callapply其他目的是使this在於函數表現得像另一個對象的約束。

<script> 
var firstObject = { 
    says: "something", 
    saysToo: "other" 
} 

var secondObject = { 
    speak: function() { 
     console.log(this.saysToo); 
    }, 
    saysToo: firstObject.says 
} 

secondObject.speak(); //shows: "something" 

//bind with "firstObject" 
secondObject.speak.call(firstObject); //shows: "other" 
</script>