Drkcore

05 02 2007 javascript Tweet

javascriptの関数のハンドラ化というもの

javascript第3版を読んでから、WEB+DB PRESS Vol.35のAjax特集など読み返していたら、オブジェクトのメソッドをイベントハンドラにするっていうところでちょっと分からないことがあった。

ProductName WEB+DB PRESS Vol.35

技術評論社 / ?円 ( 2006-10-21 )


function Human(name){
    this.name = name;
}

Human.prototype = {
    sayMyName: function(){
        alert('My name is'  + this.name + '.');
    }
};

var kzfm = new Human('kzfmix');
setTimeout(kzfm.sayMyName, 1000);

はだめで、

setTimeout(function(){kzfm.sayMyName()}, 1000);

とする必要があると。一緒に乗ってたコンストラクタでやる例をみても、あー、クロージャなんだなってことで納得したんだけど、クロージャ使わない最初の例だとthisって何を指すんだろうと気になったので調べてみた(googleで)。

くーすーって美味しいよね クロージャとthisスコープ

このコードがなぜいけないかというと、イベントに渡された関数オブジェクトに含まれるthisが参照するのは、インスタンスのメソッドではないからだ。何をさしているかというとこの場合、thisはelementノードをさしている。

ふむー。なるほど。しかしjavascriptの場合ダンプってどうやるのかは分からずじまい。perlのData::Dumperみたいのはないんだろうか。

と思って、debug javascript dumperで検索かけたらビンゴ。はてなでも質問されてた

あとでちょっと使ってみる。

About

  • もう5年目(wishlistありマス♡)
  • 最近はPythonとDeepLearning
  • 日本酒自粛中
  • ドラムンベースからミニマルまで
  • ポケモンGOゆるめ

Tag

Python Deep Learning javascript chemoinformatics Emacs sake and more...

Ad

© kzfm 2003-2021