0

関数からオブジェクトを返すことができないようです。関数内のconsole.logはプロパティ値を正常に出力しますが、関数の外に出ると「Uncaught ReferenceError:firstOnisnotdefined」が表示されます。

助けていただければ幸いです、ありがとう!

myElement = document.getElementById("testButton");

function Server(name,tables,startTime) {
    this.name = name;
    this.tables = tables;
    this.startTime = startTime;
}


document.forms.server1.button.onclick = function() {
    var name = document.forms.server1.servername.value;
    var tables = document.forms.server1.servertables.value;
    var startTime = document.forms.server1.servertime.value;

    var firstOn = new Server(name,tables,startTime);

    document.forms.server1.button.innerHTML = "Saved!";

    console.log(firstOn.name);
    console.log(firstOn.tables);
    console.log(firstOn.startTime);

    return firstOn;

};

myElement.onclick = function() {
    console.log(firstOn.name);
    console.log(firstOn.tables);
    console.log(firstOn.startTime);

};
4

4 に答える 4

3

そのfirstOnオブジェクトは、ローカル関数スコープで作成されました。2番目の関数ではグローバルに使用できなくなります。

于 2012-07-24T21:10:15.047 に答える
0
var firstOn = new winMain.Server(name,tables,startTime);
于 2012-11-08T18:30:33.513 に答える
0

これが私の問題に対する適切な解決策だと思います。

myElement = document.getElementById("testButton");

function Server(name,tables,startTime) {
    this.name = name;
    this.tables = tables;
    this.startTime = startTime;
}

var firstOn = new Server();

document.forms.server1.button.onclick = function() {
    firstOn.name = document.forms.server1.servername.value;
    firstOn.tables = document.forms.server1.servertables.value;
    firstOn.startTime = document.forms.server1.servertime.value;

    document.forms.server1.button.innerHTML = "Saved!";

    console.log(firstOn.name);
    console.log(firstOn.tables);
    console.log(firstOn.startTime);

    return firstOn;

};

myElement.onclick = function() {
   console.log(firstOn.name);
   console.log(firstOn.tables);
   console.log(firstOn.startTime);
};
于 2012-07-24T21:14:38.997 に答える
0

firstOndocument.forms.server1.button.onclick作成され、イベントハンドラから返されたオブジェクトです。そのイベントハンドラーからの戻り値はシステム(イベントハンドラーが戻る場所)に送られ、どこにも保存されなかったため、ガベージコレクションを使用してシステムによってクリーンアップされました。

一方、イベントハンドラーは、到達可能な場所に保存されていないためmyElement.onclick、オブジェクトにアクセスできません。firstOnmyElement.onclick

firstOnイベントハンドラーの後で使用できるようにする場合document.forms.server1.button.onclickは、2番目のクリックハンドラーがそれぞれ使用できる場所に保存する必要があります。これは、グローバル変数に含まれている場合もあれば、グローバルにアクセス可能な他のオブジェクトのプロパティである場合もあります。あなたのコードは今書かれているので、firstOnオブジェクトは作成されますが、どこにも保存されないので、ガベージコレクターによってうまくクリーンアップされ、他のコードからは到達できません。

于 2012-07-24T21:15:02.507 に答える