2015-10-18 83 views
2

如何在以下代碼中從bar()函數內部訪問baz()?訪問父子方法Javascript

var obj = { 
    baz : function(){ alert("Hi!"); }, 
    foo: { 
     bar: function(){ 
      baz(); 
     } 
    } 
} 
+4

obj.baz將在這種簡化的情況下工作 –

+0

這不是OOP意義上的「父」。 – Bergi

回答

3

JavaScript沒有有一點f內置的父引用,因爲一個對象可以被我們稱之爲多對一關係的多個「父母」引用。

正如其他人所說,在這種簡化的情況下,只需撥打obj.baz()即可使用。

在更復雜的情況下,你必須手動建立的目的和軌道父母:

// Create the root object 
var rootObject = {baz: function() {console.log('rootBaz');}} 

// And the basic child 
var childObject = {foo: function() {console.log('childFoo');}} 

// Configure the parent 
childObject.parent = rootObject; 

// Add our call. 
childObject.baz = function() {this.parent.baz()}; 

// Invoke and test 
childObject.baz(); 

哪些可以稍微簡化:

var rootObject = { 
    baz: function() {console.log('rootBaz');} 
}; 

var childObject = { 
    foo: function() {console.log('childFoo');}, 
    baz: function() {this.parent.baz()} 
}; 

childObject.parent = rootObject; 
childObject.baz(); 

每Sujet的評論

更新

此外,如果您需要確保baz對於有正確的值您可以使用callapply

baz: function() {this.parent.baz.call(this.parent)} 

如果你的代碼不需要this那麼我會建議每個我原來的答覆直線函數調用。

+0

也許解釋*電話*和*應用*功能。 http://stackoverflow.com/questions/17017115/javascript-call-function –

+0

謝謝@HorsSujet。完成。 –

1

只需使用對象引用:

var obj = { 
    baz : function(){ alert("Hi!"); }, 
    foo: { 
     bar: function(){ 
      obj.baz(); 
     } 
    } 
}