【发布时间】:2014-05-05 03:50:25
【问题描述】:
所以,这个网站的某个地方可能已经回答了这个问题,但我找不到它,如果是的话。
我无法弄清楚为什么当我创建对象时我的函数内部的this 引用之一似乎已解决,而当我调用其中包含引用的函数时似乎解决了一个问题。这是一些代码:
function MyObj (name) {
this.locked = false;
this.name = name;
this.elem = null;
this.func1 = function () {
if (this.locked) return;
/* code that changes this.name here */
this.elem.innerHTML = this.name;
};
this.func2 = function () {
this.locked = !this.locked;
if (this.locked) this.elem.className = "locked";
else this.elem.className = "unlocked";
};
}
var myObjGlobal = new MyObj("foo");
function callFunc1 () {
myObjGlobal.func1();
}
然后我有一个在文档加载时调用的函数:
function onLoad() {
var myElem = document.getElementById("myElem");
myObjGlobal.elem = myElem;
myElem.onclick = myObjGlobal.func2;
document.getElementById("myButton").onclick = callFunc1;
}
我已确保我所有的 html 元素都有正确的 ID。当我单击myButton 时,我没有收到任何错误。然而,当我点击myElem 时,我得到Uncaught TypeError: Cannot set property 'className' of undefined。
为什么我调用函数时设置了第一个this,创建对象时设置了第二个this? (或者看起来是这样?)
这里有一个working jsfiddle 显示问题(使用给定的示例代码)。
提前致谢!
【问题讨论】:
标签: javascript html this scope