我有两个用作类的函数:Person
和Eye
。
Person
本身会创建一个Eye
对象。稍后我尝试访问创建的eye对象,并在用户点击网页时使用事件处理程序。
function Eye(){
this.color="Green";
}
function Person() {
this.name="John";
this.eye = new Eye();
//eye=this.eye; // uncomment and everything works!
document.addEventListener("click", function(){
console.log(name); // This works
console.log(eye); // This doesn't work
})
}
var person= new Person();
为什么这不起作用?制作第二个变量eye
似乎解决了这个问题,但我不知道为什么......
答案 0 :(得分:1)
它不起作用,因为“eye”不是变量,它是对象的属性。你没有告诉JavaScript什么对象要看。
您必须将this
的值保存在另一个本地变量中:
function Person() {
this.name="John";
this.eye = new Eye();
var person = this;
然后你可以在事件处理程序中使用它:
console.log(person.eye);
答案 1 :(得分:0)
document.addEventListener("click", function() {
console.log(name);
console.log(eye);
});
在此上下文中,name
引用窗口对象的name
属性,因为您没有指定要从中访问它的对象。 window.name
恰好在我的实施中返回"result"
。并且eye
无效,因为eye
尚未定义为变量。
要解决此问题,请使用变量将对当前对象的引用存储在事件函数中并在其中使用。
var ref = this;
document.addEventListener("click", function() {
console.log(ref.name);
console.log(ref.eye);
});
输出:
John Eye { color: "Green" }