目次
Java の super(); 自動呼び出しが特殊なのかも
class Parent {
Parent() {
System.out.println("Parent のコンストラクタが実行されました");
}
}
class Child extends Parent {
Child() {
// 実際には super(); が自動的に呼ばれる
System.out.println("Child のコンストラクタが実行されました");
}
}
public class Main {
public static void main(String[] args) {
Child child = new Child();
}
}
- これが普通だと思っていたけど、PHP, Ruby では違うっぽい
具体的に this はどこで決まる?
const obj = {
name: "Alice",
showThis: function() {
console.log(this.name);
}
};
obj.showThis(); // "Alice"
- 関数を変数に渡す(
thisが変わる!)
const obj = {
name: "Alice",
showThis: function() {
console.log(this.name);
}
};
const fn = obj.showThis;
fn(); // ❌ `undefined` またはエラー(strict mode)
class MyClass {
constructor() {
this.name = "MyClassInstance";
}
handleClick() {
console.log(this.name);
}
}
const obj = new MyClass();
obj.handleClick(); // ✅ this は obj
- 関数の実行時に決まる
アロー関数のthisは?
document.getElementById("btn").addEventListener("click", () => obj.handleClick());
どう動作するか?
クリックされたとき
() => obj.handleClick()の アロー関数が実行される。- その中で
obj.handleClick()が その時点のobjのhandleClickを呼び出す。thisはobjのまま維持される(アロー関数のthisは定義時のthisを保持するため)。
バンドルツールとは?
バンドルツールは、JS/CSS などを 1 つにまとめて最適化するツール
代表的なバンドルツール
| ツール名 | 特徴 |
|---|---|
| Webpack | 最も有名なバンドルツール。カスタマイズ性が高い。 |
| Vite | 高速な開発環境を提供するモダンツール(ESModules ベース)。 |
| Parcel | 設定不要で簡単に使える。 |
| esbuild | 超高速なバンドルツール(Go 言語製)。 |
| Rollup | 軽量で、ESModules に特化。 |
scroll イベントで要素の表示を検知する実装
document.addEventListener("scroll", () => {
const target = document.getElementById("triggerElement");
const rect = target.getBoundingClientRect();
const windowHeight = window.innerHeight;
if (rect.top < windowHeight && rect.bottom > 0) {
console.log("要素が表示領域に入った!");
}
});
getBoundingClientRect()で 要素の座標を取得.top→ 要素の上端の Y 座標(ビューポートの上からの距離).bottom→ 要素の下端の Y 座標(ビューポートの上からの距離)
window.innerHeightは ビューポートの高さrect.top < windowHeightで 要素の上端が画面内に入ったら発火rect.bottom > 0で 要素の下端が画面内にあるか確認(完全に消えてないか)
Enum と Struct
| Enum(列挙型) | Struct(構造体) | |
|---|---|---|
| 用途 | 限定された値を表す | 複数のデータを1つにまとめる |
| データ | 定数(固定値) | 変数(異なる型のデータ) |
| メモリ | 小さい(値のみ) | より最適化されている |
| 拡張性 | 変更不可(列挙値を追加する以外) | プロパティを追加できる |
| PHP | enum(PHP8.1〜) | class で代用 |
まぁ覚えるの大変です。エンジニア 1 年生って困難です。