有没有办法在JavaScript中检查父/调用对象?

时间:2012-02-24 19:33:27

标签: javascript metaprogramming

鉴于此设置:

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"

有什么想法吗?

2 个答案:

答案 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的父母? applebanana都是,但这没有意义......

此外,如果您将命名空间功能调用于上下文之外,那么您的想法虽然不错但不会起作用。

答案 1 :(得分:0)

曾经有__parent__,但它已被删除。我不确定它是如何工作的,请看davins回答。

您可能还要查看Access parent's parent from javascript object