javascript - JS 中的非实例化构造函数

标签 javascript arrays constructor

我知道我可以使用构造函数创建一个构造函数,例如

var obj = function() {this.fun1 = function(){...};};

然后使用

将函数添加到构造函数中
obj.prototype.fun2 = function(){...}; //etc...

我的问题是,是否可以在对象中声明可以在不实例化对象的情况下调用的函数。要理解我的意思,请看 Array 对象。你可以声明一个数组,例如

var arr = [...];

以及该数组上的调用函数,例如

arr.length();

此类函数的格式为

Array.prototype.length = function() {...}

但是还有其他不属于原型(prototype)一部分的函数,可以在不实例化数组的情况下调用,例如 Array.isArray()(这显然不是) > Array.prototype.isArray())。有没有办法在自定义构造函数中声明类似的函数?

最佳答案

您正在谈论 static 之间的区别和非静态方法。

静态方法不需要类的实例,而是在构造函数本身上调用。因为函数是对象,所以您可以将属性和方法分配给构造函数:

const MyClass = function () {
  // this is a constructor function
};

MyClass.staticProperty = 'foo';

MyClass.staticMethod = function () {
  // this is a static method
};

MyClass.prototype.method = function () {
  // this is a non-static method
};

为了调用 staticMethod,您不需要创建 MyClass 的实例 - 只需调用它即可:

MyClass.staticMethod();

为了调用方法,您确实需要创建MyClass的实例:

const obj = new MyClass();
obj.method();

使用 ES2015 类语法,您可以借助 static 关键字定义静态方法:

class MyClass ()
  constructor () {
    // ...
  }
  static staticMethod () {
    // ...
  }
}
MyClass.staticMethod(); // call the static method

关于javascript - JS 中的非实例化构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48370796/

相关文章:

javascript - 为什么 getBoundingClientRect 在 IE8 中很慢?

arrays - 如何从 Java 8 中的 3 维数组获取 Stream?

c++ - 为什么这个模板类没有编译?

python - 如何在不调用初始化程序的情况下创建类实例?

javascript - 将多个类应用于ckeditor中的 block 级元素

javascript - 八位字节流数据 URI 忽略 <a> 'download' 属性

javascript - 没有虚拟 DOM 的 ReactJS

错误类型的 C# 数组可能吗?

java - Android:如何列出父文件夹内的所有子文件夹?

c++ - 模板类 : No default constructor