在JavaScript中,使用new关键字来创建类的实例时,这个过程本身与时序(即在DOM加载之前还是之后)关系不大,而是更多地与JavaScript代码的执行顺序有关。然而,当你想要在创建类的实例之后进行DOM操作时,你需要确保DOM元素已经被加载和解析。

创建类的实例

当你使用new关键字创建类的实例时,你是在执行一段JavaScript代码,这个过程本身并不依赖于DOM的状态。例如:

class MyClass {
    constructor(name) {
        this.name = name;
    }
 
    sayHello() {
        console.log(`Hello, ${this.name}!`);
    }
}
 
const myInstance = new MyClass("World");
myInstance.sayHello(); // 输出: Hello, World!

这里的new MyClass("World")是在执行一段普通的JavaScript代码,与DOM的加载与否无关。

DOM操作

当你需要在创建类的实例后进行DOM操作时(例如,获取DOM元素或修改DOM),你应该确保这些操作在DOM完全加载之后执行。有几种方法可以确保这一点:

  1. 将JavaScript代码放在文档的底部:将所有脚本标签放在HTML文档的底部(</body>标签之前),这样可以确保在执行脚本之前页面上的所有元素都已加载。

    <body>
        <!-- 页面内容 -->
        <script src="script.js"></script>
    </body>
  2. 使用DOMContentLoaded事件:这个事件在初始HTML文档被完全加载和解析完成之后触发,不需要等待样式表、图像和子框架完成加载。

    document.addEventListener('DOMContentLoaded', function() {
        const myInstance = new MyClass("World");
        myInstance.sayHello(); // 此时DOM已加载,可以安全地操作DOM
    });
  3. 使用window.onload事件:这个事件在页面上所有资源(如图像、脚本文件等)完全加载完成后触发。

    window.onload = function() {
        const myInstance = new MyClass("World");
        myInstance.sayHello(); // 此时所有资源都已加载,可以安全地操作DOM
    };

结论

  • 创建类的实例本身与时序无关,但进行DOM操作时需要确保DOM已加载。
  • 通过将JavaScript代码放在文档底部或使用DOMContentLoaded/window.onload事件,可以确保在执行DOM操作时DOM是可用的。