Javascript SpiderMonkey:如何从c中获取当前JSObject的名称?
有人问。这对我有点帮助 但是,有人知道如何从c获取对象的当前JavaScript名称吗 例如:Javascript SpiderMonkey:如何从c中获取当前JSObject的名称?,javascript,c,spidermonkey,Javascript,C,Spidermonkey,有人问。这对我有点帮助 但是,有人知道如何从c获取对象的当前JavaScript名称吗 例如: var foo={prop:'bar'}; 然后在jsapi.cpp中的某个地方: JS_somemethod(JSContext *cx, JSObject *obj){ //how do i get the name 'foo' (or the current alias) here if *obj points to the foo (or whatever alias name) obje
var foo={prop:'bar'};
然后在jsapi.cpp中的某个地方:
JS_somemethod(JSContext *cx, JSObject *obj){
//how do i get the name 'foo' (or the current alias) here if *obj points to the foo (or whatever alias name) object?
}
Thx的提示和答案 在不仔细研究API的情况下,我想说,虽然在一些非常基本的情况下可以这样做,但您不希望这样做。这就是为什么: 在Javascript中,与大多数语言一样,变量指向值。变量不是值本身。对象与名称foo没有任何内在联系。 例如,你可以
var foo = {prop: 'bar'};
var fooo = foo;
var foooo = foo;
var quux = {q: foo, r: foo, s: [foo]};
所有那些foo
s现在都是完全相同的foo;你想要哪一个?没有API调用,因为它太不明确,也没有太大的用处
但是,如果您真的想找到一个保存值的全局变量,可以尝试迭代全局对象上的键并测试它们的值
for(var key in this){
if(this[key] == myval){
var myname = key;
}
}
您必须将其转换为API调用,或者将其放入函数中并通过API调用
更简单、更直接的解决方案是在以后找出您希望对foo执行的操作,并传入一个回调函数来执行该操作,例如,使用
tl;dr:上一段。如果不仔细看API,我会说,虽然在一些非常基本的情况下可能做到这一点,但您不想这么做。这就是为什么: 在Javascript中,与大多数语言一样,变量指向值。变量不是值本身。对象与名称foo没有任何内在联系。 例如,你可以
var foo = {prop: 'bar'};
var fooo = foo;
var foooo = foo;
var quux = {q: foo, r: foo, s: [foo]};
所有那些foo
s现在都是完全相同的foo;你想要哪一个?没有API调用,因为它太不明确,也没有太大的用处
但是,如果您真的想找到一个保存值的全局变量,可以尝试迭代全局对象上的键并测试它们的值
for(var key in this){
if(this[key] == myval){
var myname = key;
}
}
您必须将其转换为API调用,或者将其放入函数中并通过API调用
更简单、更直接的解决方案是在以后找出您希望对foo执行的操作,并传入一个回调函数来执行该操作,例如,使用
tl;dr:上一段。好的,为了记录您评论中的问题澄清,我将在这里重复: 也许我可以简单地告诉你我的目的:为了在WebBrowser中集成新的安全系统,我需要找出在网站上的公共会话中访问的内容。我的目标是得到一个类似日志的东西,它可以访问哪些对象以及如何访问(读、写、执行)。例如:window.alert(x)window.foo.bar(w)。。。你现在知道为什么我需要变量的名称了吗?也许你还有别的想法 先说一句,总的来说这是相当棘手的。您可以选择几个选项,所有这些选项都有些困难:
调试器对象绝对是我在这里列出的对象中最喜欢的选项。如果你采用这种方法并最终陷入困境,请访问irc.mozilla.org中的#jsapi并尝试获得jorendorff或jimb,他们a)很棒,b)调试器对象的创建者。好的,为了记录你评论中的问题澄清,我将在这里重复: 也许我可以简单地告诉你我的目的:为了在WebBrowser中集成新的安全系统,我需要找出在网站上的公共会话中访问的内容。我的目标是得到一个类似日志的东西,它可以访问哪些对象以及如何访问(读、写、执行)。例如:window.alert(x)window.foo.bar(w)。。。你现在知道为什么我需要变量的名称了吗?也许你还有别的想法 先说一句,总的来说这是相当棘手的。您可以选择几个选项,所有这些选项都有些困难: