如何在Javascript中以字符串形式获取类对象的名称?
假设我以如下方式实例化Java对象:
var myObj = new someObject();
现在,是否可以'myObj'
从一种类方法中获取字符串形式的var对象的名称?
其他详细信息(已编辑):
我之所以想获取持有该对象引用的变量的名称,是因为我的new变量myObj
将DIV
在页面上创建一个新的clickable
,需要调用一个函数myObj.someFunction()
。在插入新对象时,DIV
我需要知道持有对象引用的变量的名称。也许有更好的方法吗?
您是对的,对术语的混淆感到抱歉。
我之所以想获取持有该对象引用的变量的名称,是因为我的新myObj会在页面上创建一个新的可单击DIV,这需要调用函数myObj.someFunction()。当我插入新的DIV时,我需要知道持有对象引用的变量的名称。也许有更好的方法吗?
回答:
Shog9是正确的,因为要用多个变量引用一个对象,所以问这个问题没有太大意义。如果您真的不太在意,而只想找到引用该对象的全局变量之一的名称,则可以执行以下操作:
function myClass() { this.myName = function () {
// search through the global object for a name that resolves to this object
for (var name in this.global)
if (this.global[name] == this)
return name
}
}
// store the global object, which can be referred to as this at the top level, in a
// property on our prototype, so we can refer to it in our object's methods
myClass.prototype.global = this
// create a global variable referring to an object
var myVar = new myClass()
myVar.myName() // returns "myVar"
请注意,这是一个丑陋的技巧,不应在生产代码中使用。如果引用一个对象的变量多于一个,则无法确定将得到哪个变量。它只会搜索全局变量,因此如果变量在函数本地是无效的。通常,如果需要命名,则应在创建名称时将其传递给构造函数。
:为了响应您的澄清,如果您需要能够引用事件处理程序中的某些内容,则不应按名称引用它,而应添加直接引用该对象的函数。这是我快速举过的一个简单示例,它显示出与您尝试执行的操作类似的操作:
function myConstructor () { this.count = 0
this.clickme = function () {
this.count += 1
alert(this.count)
}
var newDiv = document.createElement("div")
var contents = document.createTextNode("Click me!")
// This is the crucial part. We don't construct an onclick handler by creating a
// string, but instead we pass in a function that does what we want. In order to
// refer to the object, we can't use this directly (since that will refer to the
// div when running event handler), but we create an anonymous function with an
// argument and pass this in as that argument.
newDiv.onclick = (function (obj) {
return function () {
obj.clickme()
}
})(this)
newDiv.appendChild(contents)
document.getElementById("frobnozzle").appendChild(newDiv)
}
window.onload = function () {
var myVar = new myConstructor()
}
以上是 如何在Javascript中以字符串形式获取类对象的名称? 的全部内容, 来源链接: utcz.com/qa/406308.html