下記のコードをHTML内に記述します。おなじHTML内のある要素に対して、clickイベントとして"slime.func()"を割り当てたいとき、どうやればよいのでしょうか。
イベントハンドラ内のthisがslimeオブジェクトではなくDOMのオブジェクトを指すことは [http://builder.japan.zdnet.com/sp/javascript-kickstart-2007/story/0,3800083428,20371112,00.htm:title] などを見て理解しましたが、ではそういう場合はどうすればよいの、という質問です。
なおprototype.jsなどのライブラリは使用できない状況とお考えください。
――― [code] ―――
var Monster = function() {};
Monster.prototype = {
initialize: function(name) {
this.name = name;
},
func: function() {
alert(this.name + " has shown up.");
}
};
window.onload = function() {
var slime = new Monster("slime");
}
質問の的を外しているかもしれませんが、
window.onload = function() { var slime = new Monster("slime") ; }
関数内で var を付けて宣言するとそのオブジェクトのスコープは関数内に制限されます。
つまり他からはアクセスできません。
window.onload = function() { slime = new Monster("slime"); }
var 無しにするとグローバルオブジェクトになるので
<div onclick="slime.func();" name="hoge">click me</div>
とかで呼び出すことができます。