C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: JavaScriptのクラスが動作しない


(過去ログ 177 を表示中)

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■101842 / inTopicNo.1)  JavaScriptのクラスが動作しない
  
□投稿者/ peter (1回)-(2023/04/29(Sat) 12:07:44)

分類:[JavaScript] 

JavaScriptでクラスを使いたくて、今勉強中なのですが、
以下のようなコードを書くと動作しません。
以下にjsとhtmlの内容を書きます。

(test.jsの内容)
const para_1 = 'TEST';
init();

function init() {
	var cls = new ClsTest(para_1);
	var elm = document.getElementById('test');
	elm.innerText = cls.name;
}

class ClsTest {
	constructor(name) {
		this.name = name;
	}
}

(test.htmの内容)
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<script src="test.js" defer></script>
</head>
<body>
	<div>
		<span id="test"></dpan>
	</div>
</body>
</html>

どうも、init()内のクラスをnewしている所で止まってしまうようです。
ちなみに、<body>のonloadでinit()を呼び出せば、期待通りに動きました。
もしかして、クラスをnewする場所が悪いのでしょうか?

動作確認はWindows10上のChromeで行いました。
宜しくお願いします。

引用返信 編集キー/
■101843 / inTopicNo.2)  Re[1]: JavaScriptのクラスが動作しない
□投稿者/ 伝説のカレー (99回)-(2023/04/29(Sat) 12:28:38)
No101842 (peter さん) に返信

init()が呼ばれた時点では

> document.getElementById('test');

これで取得しようとしているElementが存在しないんでしょうね

onloadのタイミングでinit()を呼び出すのが良いと思います
引用返信 編集キー/
■101844 / inTopicNo.3)  Re[1]: JavaScriptのクラスが動作しない
□投稿者/ WebSurfer (2680回)-(2023/04/29(Sat) 12:37:23)
No101842 (peter さん) に返信

> <span id="test"></dpan>

</dpan> は </span> の間違いですね?

> var cls = new ClsTest(para_1);

上の行で Uncaught ReferenceError: Cannot access 'ClsTest' before initialization とい
うエラーとなっているはずです。

以下の記事と同じ問題でしょう。

Uncaught ReferenceError: Cannot access 'Class' before initialization
https://stackoverflow.com/questions/65191836/uncaught-referenceerror-cannot-access-class-before-initialization

その記事に書いてあるように init(); を最後の行に移動すれば動くと思います。
引用返信 編集キー/
■101845 / inTopicNo.4)  Re[2]: JavaScriptのクラスが動作しない
□投稿者/ WebSurfer (2681回)-(2023/04/29(Sat) 12:40:34)
No101843 (伝説のカレー さん) に返信
> ■No101842 (peter さん) に返信
>
> init()が呼ばれた時点では
>
>>document.getElementById('test');
>
> これで取得しようとしているElementが存在しないんでしょうね

その問題ではなさそうです。No101844 に書きましたが、エラーはその上の行の、

> var cls = new ClsTest(para_1);

で出ています。
引用返信 編集キー/
■101846 / inTopicNo.5)  Re[2]: JavaScriptのクラスが動作しない
□投稿者/ peter (2回)-(2023/04/29(Sat) 13:05:03)

> その記事に書いてあるように init(); を最後の行に移動すれば動くと思います。

ありがとうございました。
init();を一番最後の行に持っていくと期待通りに動きました。
また、元々のコードのinit();の前にクラス定義のコードを書いた場合も動作したので、
JSではクラスをnewするコード(またはそのコードの呼出元)より先に
クラス定義のコードを書いておく必要があることが判りました。

いやー勉強になりました。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -