私のコードを参照してください http://jsfiddle.net/kxATT/3/
function byId(id) {
if (id) {
return document.getElementById(id);
} else {
return null;
}
}
function setAttr(elm, attr, value) {
elm.setAttribute(attr, value);
}
var app = {
id: 12,
fn: function () {
alert(this.id);
}
};
function init() {
setAttr(byId('txt'), 'onclick', 'app.fn()');
byId('txt1').addEventListener('click', app.fn, true);
}
最初のボックスをクリックすると、警告が表示されます12
。そして、2 番目のボックスについては警告しtxt1
ます。どちらの場合も明らかに同じ関数を呼び出していますが、this
異なるオブジェクトを参照しています。入力要素の場合、要素のオブジェクト自体が関数に渡されthis
、イベント ハンドラー関数内として参照されると聞きました。もしそうなら、setAttribute を使用してイベントが追加されたときに、そうでないのはなぜですか。