简单的方法(没有eval)将传递的字符串转换为JS中的对象引用?

时间:2011-02-03 20:16:14

标签: javascript

所以,假设我有一个页面功能:

<img src="someImage.jpg" onclick="doSomething(this.id)" id="someVar" alt="blah" />

我有一个班级设置:

function anObject(someProp)
{
this.someProp=someProp;
}
someVar=anObject("prop");

我遇到麻烦的地方是doSomething函数:

function doSomething(theObject)
{
alert(theObject.someProp); //this is treated as "someVar".someProp as far as I can tell instead of someVar.someProp
}

基本上,我希望能够将该引用用作对象引用而不是字符串,是否有一种简单的方法可以在没有eval的情况下执行此操作?

还有一些方法可以确保对手,它被视为字符串而不是对象吗?

编辑:我试图引用与图像ID相同的对象而不是图像本身。

3 个答案:

答案 0 :(得分:2)

doSomething(this) 

删除.id,它将为您提供实际DOM元素作为对象的引用

答案 1 :(得分:1)

你传递一个字符串(this.id)而不是一个对象到你的函数。 应该是:

<img src="someImage.jpg" onclick="doSomething(this)" id="someVar" alt="blah" />

答案 2 :(得分:1)

我使用了一个集合对象:

// 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"
}