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

有没有办法检查JavaScript中的父对象/调用对象?,javascript,metaprogramming,Javascript,Metaprogramming,鉴于此设置: var ObjectNamespace = {} var FunctionNamespace = function FunctionNamespace() {} ObjectNamespace.User = function() {} FunctionNamespace.User = function User() {} 是否有编写命名空间方法来完成以下任务: ObjectNamespace.User.namespace() //=> "ObjectNamespace

鉴于此设置:

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

ObjectNamespace.User = function() {}
FunctionNamespace.User = function User() {}
是否有编写
命名空间
方法来完成以下任务:

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"
通过执行以下操作可以获得第一个节点:

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"
但我的问题是,有没有一种方法可以引用“父”对象,即
用户
函数所定义的对象(
ObjectNamespace
)?沿着
参数.caller.callee
行的某个元。这样你就会得到这个:

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

有什么想法吗?

绝对没有。让我们假设有,我们称之为
*.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的父母?苹果和香蕉都是,但这没有意义

此外,如果您在上下文之外调用名称空间函数,您的想法虽然很好,但不会起作用。

曾经有过,但它已被删除。我不知道它是如何工作的,见戴文斯的回答

你也可以看看