2012-02-24 157 views
1

鑑於此設置:有沒有辦法在JavaScript中檢查父/調用對象?

var ObjectNamespace = {} 
var FunctionNamespace = function FunctionNamespace() {} 

ObjectNamespace.User = function() {} 
FunctionNamespace.User = function User() {} 

反正是有寫namespace方法來完成這樣的事情:

ObjectNamespace.User.namespace = function() { 
    return this.toString().match(/function *(\w+)/)[1] 
} 

ObjectNamespace.User.namespace() //=> "User" 

ObjectNamespace.User.namespace() //=> "ObjectNamespace.User" 
FunctionNamespace.User.namespace() //=> "FunctionNamespace.User" 

你可以做這樣的事情得到的第一個節點

但我的問題是,有沒有辦法引用「父」對象,即對象User函數定義在(ObjectNamespace)?有些東西符合arguments.caller.callee。這樣,你會得到這個:

ObjectNamespace.User.namespace() //=> "ObjectNamespace.User" 

任何想法?

回答

2

絕對不是。我們假設有,我們稱之爲*.parent。以下代碼會做什麼:

var apple = {}, banana = {}, lemon = {}; 
banana.friend = apple.friend = lemon; 

lemon.parent.otherThing = 6; 

console.log(apple.otherThing, banana.otherThing); 

// 6, undefined? 
// undefined, 6? 
// 6, 6? 

誰是lemon的父母?無論applebanana是,但是這沒有任何意義......

而且,你的想法,而良好的,不會,如果你調用的命名空間功能斷章取義的工作。

相關問題