1

javascript でオブジェクトについて学習するためのテスト html ファイルを作成するだけです。コードは次のとおりです。

スクリプトタグで

<script type="text/javascript">

    var obj = new ParentFn();
    var obj2 = new AnotherParentFn();
    var temp;
    function initer()
    {
        temp = obj.Adding();
        obj2.caller();
    }
    function ParentFn()
    {
        this.a = 10;
        this.b = 20;
    }
    function AnotherParentFn()
    {
        this.a = 30;
        this.b = 50;
    }
    AnotherParentFn.prototype.caller = function()
    {
        var self = this;
        temp();
    }
    ParentFn.prototype.Adding = function()
    {
        var self = this;
        document.getElementById("id_div1").innerHTML = " Method Called and Result of a+b is " + (self.a + self.b);          
    }

</script>

体内で私が使用する

<button onclick="initer()"> Click here to test </button>
<div id="id_div1"></div>

問題は、AnotherParentFn.prototype.caller が initer() 関数から呼び出された場合、一時変数がまだ定義されていないことです。コードの何が問題になっていますか??

私の仕事は、関数 ParentFn.prototype.Adding をグローバル変数に割り当て、AnotherParentFn.prototype.caller 関数からグローバル変数を呼び出すことです。それを達成する方法は?

4

4 に答える 4

1

グローバル変数として保存する必要はありません。に既に保存されていParentFn.prototypeます。あなたがする必要があるのは、それを呼び出して.call、目的のレシーバーを渡すことだけです。AnotherParentFn.prototype.caller次のように実装できます。

AnotherParentFn.prototype.caller = function()
{
    ParentFn.prototype.Adding.call(this);
}

この方法で完全に取り除くことができますtemp。また、どこでもthisローカルに割り当てる必要はありません。var self

于 2013-04-02T06:19:21.057 に答える
0

書き込みにより temp = obj.Adding(); 戻り値を格納します。の関数ポインタではありませんtemp。これを使って

function initer()
{
    temp = obj.Adding;
    obj2.caller();
}
于 2013-04-02T06:03:00.953 に答える
0

括弧は関数の実行に使用されます。に値を代入するtempと、関数が呼び出され、結果 ( undefined) が に代入されtempます。関数への参照を に格納するにtempは、括弧を省略します。

temp = obj.Adding;
于 2013-04-02T06:03:29.737 に答える