鉴于此设置:
var ObjectNamespace = {}
var FunctionNamespace = function FunctionNamespace() {}
ObjectNamespace.User = function() {}
FunctionNamespace.User = function User() {}
无论如何都要编写一个namespace
方法来完成这样的事情:
ObjectNamespace.User.namespace() //=> "ObjectNamespace.User"
FunctionNamespace.User.namespace() //=> "FunctionNamespace.User"
您可以通过执行以下操作来获取第一个节点:
ObjectNamespace.User.namespace = function() {
return this.toString().match(/function *(\w+)/)[1]
}
ObjectNamespace.User.namespace() //=> "User"
但我的问题是,有没有办法引用“父”对象,即在User
上定义ObjectNamespace
函数的对象?有点像arguments.caller.callee
那样的东西。那样你就明白了:
ObjectNamespace.User.namespace() //=> "ObjectNamespace.User"
有什么想法吗?
答案 0 :(得分: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
的父母? apple
和banana
都是,但这没有意义......
此外,如果您将命名空间功能调用于上下文之外,那么您的想法虽然不错但不会起作用。
答案 1 :(得分:0)
曾经有__parent__
,但它已被删除。我不确定它是如何工作的,请看davins回答。