1

長いタイトルで申し訳ありませんが、私の問題を要約していると思います

私はjsfiddleを作成して、私のジレンマの単純化された問題を削減して作成しました http://jsfiddle.net/afw6k/3/

<input id="txtA"/>
<!-- after setupOnclick is executed my onlick for txtA should be onclick="someObj.log("Clicked!")"-->
<script>
    function someObject(field){
        this.field = field;

        this.log = function(msg){
            if(this.field.value != "") this.field.value += ", ";
            this.field.value += msg
        }

        this.setupOnlick = function(){ 
            field.onlick = function(){//So how do I pass this (as in someObject) to this?
                this.log("Clicked!"); //As if I have written someObj.log("Clicked!");
            }
        }
    }

    var someObj = new someObject(document.getElementById("txtA"));
    someObj.setupOnlick();
</script>

クリックしたときに単にテキストボックスに何かを書き込もうとしているわけではありませんが、上記は私がここで達成しようとしていることの単純化されたバージョンです。

これ(オブジェクト)をオブジェクト関数のネストされた関数に渡す

または、これを達成するためのはるかに良い方法はありますか?

4

1 に答える 1

4

this変数に保存します。

    this.setupOnlick = function(){ 
        var theObj = this;
        field.onlick = function(){//So how do I pass this (as in someObject) to this?
            theObj.log("Clicked!"); //As if I have written someObj.log("Clicked!");
        }
    }

の値thisは単なる値なので、別の変数にコピーできます。変数「theObj」は、実行時に「クリック」ハンドラーのスコープ内に残ります。

于 2012-07-24T12:56:47.193 に答える