你的代码工作得很好假设它在全球范围内,除了页面加载后,您不能使用document.write
。所以:
function MyClass()
{
this.instanceData = "Display Me";
this.DisplayData = function()
{
alert(this.instanceData); // <=== only change here
}
}
var classInstance = new MyClass();
...与您的onclick
属性正常工作。 Live example | source
document.write
主要用于期间的页面加载。如果您在页面加载后调用它,则暗示document.open
会清除当前文档,会用您编写的内容替换。如果要在页面加载后追加到页面,请使用createElement
和appendChild
,通过innerHTML
设置元素的内容。例如:
var p = document.createElement('p');
p.innerHTML = "Hi there";
document.body.appendChild(p);
...在页面中添加一个包含“Hi there”的段落。
然而,我劝你不要用onclick
属性和这样的,这不仅是因为他们需要访问全局变量和函数,我主张避免有全局变量和函数即可的程度(和你几乎可以完全避免它们)。相反,使用连接事件处理程序的现代方法:addEventListener
和(支持IE8及更早版本)attachEvent
。
因此改变你的例子,以便它不会产生任何全局:
(function() {
function MyClass()
{
this.instanceData = "Display Me";
this.DisplayData = function()
{
alert(this.instanceData);
}
}
var classInstance = new MyClass();
// ...and hook it up
var button = document.getElementById("theButton");
if (button.addEventListener) {
button.addEventListener('click', function() {
classInstance.DisplayData();
}, false);
}
else if (button.attachEvent) {
button.attachEvent('onclick', function() {
classInstance.DisplayData();
});
}
else {
// Very old browser, complain
}
})();
(注意,事件名称为“点击”与addEventListener
,“点击”与attachEvent
)
那假设按钮看起来像这样:
<button id="theButton">Click Me!</button>
...并且您的代码在按钮已经放到页面后运行(例如,你的脚本是at the bottom of the page或者响应某些事件运行)。
现在,检查是否每次使用addEventListener
或attachEvent
都很痛苦。此外,您可能不希望您需要使用的每个元素都有id
。这是使用像jQuery,Prototype,YUI,Closure或any of several others这样的好JavaScript库的用处。他们平滑了事件(以及其他许多特性),并提供有用的功能,用于以除id
以外的其他方式定位元素(在许多情况下,即使在旧版浏览器中也支持几乎所有CSS样式选择器) querySelector
/querySelectorAll
内置
如果你想这样做的权利,避免造成一片混乱,不使用内联事件处理程序('onclick'和朋友)。他们只是不属于你的HTML。了解'addEventListener()',你的代码将变得更清洁和易于管理。 – kapa 2012-02-17 08:55:43