如何在Javascript中找到属性的所有者

如何在Javascript中找到属性的所有者,javascript,properties,Javascript,Properties,好的,因为我最初的问题听起来不清楚,所以我决定编辑它。我的问题是,如何找出谁定义了某个属性,例如,parseInt函数,如何知道它是在哪个对象上定义的,就像parseInt是在窗口对象或文档对象或任何对象上定义的一样?多谢各位 我知道parseInt被定义为window对象,我只是把它作为一个一般的例子,我不是特别问是什么对象定义了parseInt属性 另外,请不要向我展示jQuery代码,因为我对jQuery不太了解。不幸的是,无法使用代码确定给定变量的变量环境是什么 至于对象属性,如果它们是

好的,因为我最初的问题听起来不清楚,所以我决定编辑它。我的问题是,如何找出谁定义了某个属性,例如,
parseInt
函数,如何知道它是在哪个对象上定义的,就像
parseInt
是在
窗口
对象或
文档
对象或任何对象上定义的一样?多谢各位

我知道
parseInt
被定义为
window
对象,我只是把它作为一个一般的例子,我不是特别问是什么对象定义了
parseInt
属性


另外,请不要向我展示jQuery代码,因为我对jQuery不太了解。

不幸的是,无法使用代码确定给定变量的变量环境是什么

至于对象属性,如果它们是
myObj.property
,则它们应该是显而易见的。如果不明显,可以使用穷举搜索来查找它们在某些地方的存在,或者递归地查找某些已知的存在


总的来说,不看实现文档就不可能知道。我知道要解决我的问题,我们可以使用
Object.prototype.hasOwnProperty()
,但这将是非常多的键入操作,因为每次需要知道对象上是否定义了某个属性时,您都必须键入它。我已经决定写我自己的函数,使它更容易,即使这是没有很好的实际用途,我只是想满足我的好奇心

function findOwner(property, ownerObjectArray) {
    var result = []; // Array to store the objects that the given property is defined on

    for (var i = 1; i < arguments.length; i++)
    {
        var obj = arguments[i]; // the object currently being inspected
        var properyList= Object.getOwnPropertyNames(arguments[i]); // a list of all "Owned" properties by this object

        for (var j = 0; j < properyList.length; j++)
        {
            if (property === properyList[j]) result.push(obj.constructor);
        }
    }
                return result.length > 0 ? result : "undefinded";
} 

属性在JavaScript中不是“所有的”。我的意思是,谁定义了属性,它基本上是由该对象所有的。
parseInt
函数是一个值,而不是一个属性。
parseInt
标识符是
window
对象的一个属性。@Alex,它不是全局变量,它是全局对象的一个成员。@Dummy在实践中如何应用此信息?也就是说,是否有一个实际的例子,您需要知道在什么对象中定义了某些属性?ECMAScript规范规定,
parseInt
是根
全局
对象的属性。它的函数定义通常是内置的,但如果需要,可以通过脚本重写。假设您可以通过递归搜索属性树来搜索相同的函数属性引用,但这不会告诉您任何有意义的信息。@Dai-Yup,同意所有这些:)不,我通常使用
parseInt
作为示例,我知道
parseInt
函数是在
窗口
对象上定义的。但是我想知道你怎么才能找到谁定义了某个属性呢?谢谢你让我知道这是不可能的,至少我不必再去寻找答案了。但如果有可能,那就太好了。“不幸的是,无法使用代码确定给定变量的变量环境是什么”。对ECMAScript规范没有提供任何方法来引用“变量对象”,例如,迭代属性并查找特定执行上下文中的所有变量。如果你做不到这一点,你就无法在一个上下文中找到所有的对象,因此也无法迭代找到它们的所有属性(对象可以是“匿名的”,就像函数一样)。;-)
window.onload = run;

    function run()
    {
        alert(findOwner("parseInt", Array.prototype, window, document));    // passing 3 objects we want to test against to this method. It printed : [object Window], the given property "parseInt" was found on the "Window" object
    }