在JavaScript中,如何获取声明新对象的变量的名称。
function asdf () {
this.dosomething = functon () {
var a = 1;
};
}
var qwer = new asdf();
在asdf()的范围内,我希望能够找到创建该对象实例的变量名。
答案 0 :(得分:1)
你做不到。实际上,变量根本不会创建对象。变量只包含对象的引用,但可能有多个这样的引用。
此外,应该没有必要。在asdf
中,您可以使用this
关键字来引用实例本身,该实例与qwer
引用的实例相同。
如果你需要asdf
中方法中的实例,你可以创建一个对象的局部变量,如下所示:
function asdf () {
var memyself = this; // Store reference to `this`
this.dosomething = functon () {
var a = 1;
// Use stored reference, because `this` will refer to `dosomething` here.
mymyself.dosomethingelse();
};
this.dosomethingelse = functon () {
alert('hello');
};
}
var qwer = new asdf();
另一个例子,让对象将自身绑定到元素的事件。我故意将名称放在HTML中,但您甚至可以从一组名称中生成所有HTML。开始的HTML应该只包含一个元素,在其中或之后添加每个名称的div。
您的对象可能是负责div生命周期的对象。如果您创建一个名称作为参数的对象,它可以创建一个div,添加文本,附加事件处理程序,甚至删除div。下面的代码段不是那么高级,它只是找到元素并将其中一个方法附加到该元素的click事件。
function asdf(element) {
// If element is a string, use it as id to fetch an actual element.
// (Some error checking required in prodction code).
if (typeof element === "string") {
element = document.getElementById(element);
}
// Store references to myself and my element.
var me = this;
me.element = element; // 'this' could be used instead of 'me'.
// Declare method
this.doSomething = function() {
alert(me.element.innerText); // Here, 'me' is required.
}
// Bind method to click event. 'this' could be used instead of 'me'.
me.element.addEventListener('click', this.doSomething);
}
// Create three object for the three elements.
// You may store the object in a variable
a = new asdf('john');
// But you don't even need to. The object can just exist without external
// reference (well, apart from the element which still uses its event handler).
new asdf('jane');
new asdf('nick');
Click a name to alert it.
<div class="button" id="john">John Doe</div>
<div class="button" id="jane">Jane Da</div>
<div class="button" id="nick">Nick Name</div>
我希望这是你要解决的问题,这解决了它。如果您仍然需要访问quer
,那么您可能正在实施一个糟糕的设计。如果您指定更多详细信息,我(或其他人)可能会为您找到更好的解决方案。