JavaScript中实例化与非实例化的区别与应用场景详解

 更新时间:2025年09月01日 10:21:07   作者:编程随想_Code  
在学习 JavaScript 的过程中,很多同学都会遇到这样的问题:为什么有的函数直接调用就能用,而有的必须要通过 new 来实例化,这背后其实就是 实例化 和 不实例化 的区别,本文就带你从概念、代码示例、应用场景几个方面深入探究,需要的朋友可以参考下

引言

在学习 JavaScript 的过程中,很多同学都会遇到这样的问题:为什么有的函数直接调用就能用,而有的必须要通过 new 来实例化?

这背后其实就是 实例化不实例化 的区别。本文就带你从概念、代码示例、应用场景几个方面,深入理解它们的不同。

一、什么是实例化?

实例化(Instantiation)指的是通过 构造函数(Constructor)类(Class) 创建一个具体的对象实例(Instance)。

在 JavaScript 中,通常使用 new 关键字来完成实例化。例如:

function Person(name, age) {
  this.name = name;
  this.age = age;
}

const p1 = new Person("张三", 20); // 实例化
console.log(p1.name); // 张三

这里:

  • Person 是一个构造函数;
  • new Person("张三", 20) 就是对 Person 的实例化,返回了一个具体的对象。

二、不实例化是什么?

所谓不实例化,就是直接调用函数,而不使用 new。此时函数只是作为普通函数执行,不会创建对象实例。

function Person(name, age) {
  this.name = name;
  this.age = age;
}

Person("李四", 22); // 不实例化
console.log(window.name); // 浏览器环境下 -> 李四

在上面的代码中:

  • 没有 new,所以 this 指向全局对象(浏览器中是 window,Node.js 中是 global)。
  • 导致属性 nameage 被挂载到了全局对象上,而不是新建的对象实例中。

三、实例化和不实例化的区别

我们可以从几个角度来看它们的不同:

对比点实例化(new 调用)不实例化(直接调用)
返回值返回一个对象实例返回函数本身的返回值(若无返回值则是 undefined
this 指向指向新创建的对象指向调用环境(严格模式下是 undefined,非严格模式下是 window
用途创建对象,封装属性和方法普通函数调用,执行逻辑或计算
内存结构会在堆内存中创建一个独立的对象实例没有独立对象实例,只是执行代码
适用场景类、构造函数、面向对象开发工具函数、业务逻辑函数

四、举个例子:类和工具函数

1. 构造函数/类(需要实例化)

class Animal {
  constructor(type) {
    this.type = type;
  }
  speak() {
    console.log(`${this.type} 在叫`);
  }
}

const dog = new Animal("狗"); // 实例化
dog.speak(); // 狗 在叫

这里必须使用 new,否则会报错:Class constructor Animal cannot be invoked without 'new'

2. 工具函数(不需要实例化)

function add(a, b) {
  return a + b;
}

console.log(add(1, 2)); // 3

像这种纯粹计算的函数,只需直接调用即可,不需要也不能实例化。

五、总结

  • 实例化:用 new 调用构造函数/类,返回对象实例,适合创建可复用的对象结构。
  • 不实例化:直接调用函数,执行逻辑或返回结果,适合写工具函数或业务逻辑函数。

简单一句话概括:

要创建对象时用实例化;只是执行逻辑时不用实例化。

写在最后

在实际开发中,你可以根据需求来选择:

  • 如果是 构造对象/封装属性方法 —— 用 new 实例化;
  • 如果是 简单逻辑处理/工具函数 —— 直接调用,不需要实例化。

到此这篇关于JavaScript中实例化与非实例化的区别与应用场景详解的文章就介绍到这了,更多相关JavaScript实例化与非实例化内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 捕获浏览器关闭、刷新事件不同情况下的处理方法

    捕获浏览器关闭、刷新事件不同情况下的处理方法

    在做一些关于会员在线的问题时,往往我们要根据览器是否关闭来判断用户是否下线,然后再从session和application中将此用户移除,下面与大家分享下具体的捕捉方法
    2013-06-06
  • JS仿淘宝搜索框用户输入事件的实现

    JS仿淘宝搜索框用户输入事件的实现

    这篇文章主要介绍了JS仿淘宝搜索框用户输入事件的实现,需要的朋友可以参考下
    2017-06-06
  • javascript 网页跳转的方法

    javascript 网页跳转的方法

    昨天练习的时候正好要用到跳转代码,在网上找了一下,觉得下面几个不错...整理了一下发上来...
    2008-12-12
  • 原生JS京东轮播图代码

    原生JS京东轮播图代码

    这篇文章主要为大家详细介绍了原生JS京东轮播图代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-03-03
  • 快速解决js动态改变dom元素属性后页面及时渲染的问题

    快速解决js动态改变dom元素属性后页面及时渲染的问题

    下面小编就为大家带来一篇快速解决js动态改变dom元素属性后页面及时渲染的问题。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-07-07
  • JSscript标签有哪些属性

    JSscript标签有哪些属性

    本文介绍了JSscript标签有哪些属性,向HTML页面中插入JavaScript的主要方法,就是使用script>元素.这个元素由Netscape创造并在NetscapeNavigator2中首先实现.后来,这个元素被加入到正式的HTML规范中,下面小编来讲解下JSscript标签有哪些属性,需要的朋友可以参考下
    2022-01-01
  • layui页面级弹出框的实现

    layui页面级弹出框的实现

    本文主要介绍了layui页面级弹出框的实现,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02
  • 分享ES6 20个经常使用技巧

    分享ES6 20个经常使用技巧

    这篇文章主要分享ES6 20个经常使用技巧,作用是使JavaScript语言可以用来编写复杂的大型应用程序,成为企业级开发语言,具体使用详情需要的小伙伴可以参考下面文章内容
    2022-06-06
  • 深入学习JS XML和Fetch请求

    深入学习JS XML和Fetch请求

    这篇文章主要介绍了深入学习JS XML和Fetch请求,文章通过围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-09-09
  • 微信小程序淘宝首页双排图片布局排版代码(推荐)

    微信小程序淘宝首页双排图片布局排版代码(推荐)

    这篇文章主要介绍了微信小程序淘宝首页双排图片布局排版代码,本文通过图文实例相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-10-10

最新评论