javascript技巧

关注公众号 jb51net

关闭
首页 > 网络编程 > JavaScript > javascript技巧 > JavaScript实例化与非实例化

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

作者:编程随想_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); // 张三

这里:

二、不实例化是什么?

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

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

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

在上面的代码中:

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

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

对比点实例化(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

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

五、总结

简单一句话概括:

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

写在最后

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

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

您可能感兴趣的文章:
阅读全文