Javascript 在JS中将传递的字符串转换为对象引用的简单方法(不使用out eval)?
假设我有一个页内函数:Javascript 在JS中将传递的字符串转换为对象引用的简单方法(不使用out eval)?,javascript,Javascript,假设我有一个页内函数: <img src="someImage.jpg" onclick="doSomething(this.id)" id="someVar" alt="blah" /> function doSomething(theObject) { alert(theObject.someProp); //this is treated as "someVar".someProp as far as I can tell instead of someVar.somePro
<img src="someImage.jpg" onclick="doSomething(this.id)" id="someVar" alt="blah" />
function doSomething(theObject)
{
alert(theObject.someProp); //this is treated as "someVar".someProp as far as I can tell instead of someVar.someProp
}
我遇到的问题是doSomething函数:
<img src="someImage.jpg" onclick="doSomething(this.id)" id="someVar" alt="blah" />
function doSomething(theObject)
{
alert(theObject.someProp); //this is treated as "someVar".someProp as far as I can tell instead of someVar.someProp
}
基本上,我希望能够将该引用用作对象引用,而不是字符串,有没有一种不使用eval的简单方法
还有什么方法可以确保对象被视为字符串而不是对象
编辑:我试图引用与图像ID同名的对象,而不是图像本身。
doSomething(this)
删除将作为对象引用实际DOM元素的.id
删除将作为对象引用实际DOM元素的.id如果您向函数传递的是字符串(this.id),而不是对象。 应该是:
<img src="someImage.jpg" onclick="doSomething(this)" id="someVar" alt="blah" />
您正在向函数传递字符串(this.id),而不是对象。 应该是:
<img src="someImage.jpg" onclick="doSomething(this)" id="someVar" alt="blah" />
我会使用一个集合对象:
// Create an object with a property 'someProp', and return it
// (No messing with 'this')
function createSomeObject(someProp) {
return {
someProp: someProp
};
}
// Keep a collection of variables
var someVars = {};
someVars.someVar = createSomeObject('prop');
someVars.otherVar = createSomeObject('prop2');
因此,您可以这样引用它们:
<img src="someImage.jpg" onclick="doSomething(this)" id="someVar" alt="blah" />
function doSomething(imageElement) {
var someVar = someVars[imageElement.id];
alert(someVar.someProp); // this will return "prop"
}
我会使用一个集合对象:
// Create an object with a property 'someProp', and return it
// (No messing with 'this')
function createSomeObject(someProp) {
return {
someProp: someProp
};
}
// Keep a collection of variables
var someVars = {};
someVars.someVar = createSomeObject('prop');
someVars.otherVar = createSomeObject('prop2');
因此,您可以这样引用它们:
<img src="someImage.jpg" onclick="doSomething(this)" id="someVar" alt="blah" />
function doSomething(imageElement) {
var someVar = someVars[imageElement.id];
alert(someVar.someProp); // this will return "prop"
}
@K lvanav我相信这会导致我的函数引用图像,而不是与图像ID同名的对象。除非我弄错了?是的,将图像作为对象,是否希望另一个对象引用到图像属性?@K lvanav是的,如果您查看我发布的代码,该对象创建于:someVar=anObject(“prop”);查看您的更新,在这种情况下,当您将对象的名称设置为string@Klvanav我相信这会导致我的函数引用图像,而不是与图像ID同名的对象。除非我弄错了?是的,将图像作为对象,是否要将另一个对象引用到image属性?@K lvanav是的,如果您查看我发布的代码,该对象将在以下位置创建:someVar=anObject(“prop”);查看您的更新,在这种情况下,您需要eval来引用对象,当您的名称与我为K Ivanov所说的相同时:我相信这会导致我的函数引用图像,而不是与图像ID同名的对象。除非我弄错了?我明白了。不清楚您是否有一个名为
someVar
的对象。然后,您应该包含代码的其余部分。这就是我上面所要求的全部内容。现在,如果你运行上面的代码,它将产生未定义的,我希望它产生的“prop”与我对K Ivanov说的一样:我相信这将导致我的函数引用图像,而不是与图像ID同名的对象。除非我错了?我明白了。不清楚您是否有一个名为someVar
的对象。然后,您应该包含代码的其余部分。这就是我上面所要求的全部内容。现在,如果你运行上面的代码,它会产生不确定的地方,我想让它产生“PROP”,我想问,这类功能背后的想法是什么?当然,我只是把JavaScript函数的概念搞砸了,就像C++或C语言一样。主要是为了自我教育。我有一个相当长的程序,只会有一个球反弹,或者我在浏览器中称为对象的球的数量。如果你愿意,我可以发布它,但是其余代码都是不相关的。请你问一下,这类功能背后的想法是什么?当然,我只是把JavaScript函数的概念搞砸了,就像C++或C语言一样。主要是为了自我教育。我有一个相当长的程序,只会有一个球反弹,或者我在浏览器中称为对象的球的数量。如果你愿意,我可以发布它,但是代码的其余部分是不相关的。太好了,这就是我要找的。但我必须保持一个全球的一些人,虽然?嗯。非常感谢。在此设置中,您确实需要保持someVars
global。或者,您也可以将Javascript对象附加到HTMLImage元素——尽管我不记得这是否是一种好的做法,以及为什么(不是)。您可以通过使用闭包(例如,使用工厂构造函数,它可以返回一个可以访问所有私有变量的单个对象)来避免大多数全局变量。但是你总是需要至少一个全局变量,用于公共访问。太好了,这就是我想要的。但我必须保持一个全球的一些人,虽然?嗯。非常感谢。在此设置中,您确实需要保持someVars
global。或者,您也可以将Javascript对象附加到HTMLImage元素——尽管我不记得这是否是一种好的做法,以及为什么(不是)。您可以通过使用闭包(例如,使用工厂构造函数,它可以返回一个可以访问所有私有变量的单个对象)来避免大多数全局变量。但对于公共访问,您始终需要至少一个全局变量。