JS中的非实例化构造函数

时间:2018-01-21 19:26:10

标签: javascript arrays constructor

我知道我可以使用像

这样的构造函数创建一个构造函数
var obj = function() {this.fun1 = function(){...};};

然后使用

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

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

这样的数组
var arr = [...];

和该数组上的调用函数如

arr.length();

此类功能的格式为

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

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

3 个答案:

答案 0 :(得分:1)

您在谈论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();

要致电method,您需要创建MyClass的实例:

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

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

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

答案 1 :(得分:0)

您可以创建对象lilteral并将函数添加为属性,或者创建构造函数,然后将方法添加到构造函数。



myAlert




然而,以下操作无效,因为如果不实例化构造函数和创建对象,则无法访问var MyOtherConstructor = function() { this.myAlert = function(str) { alert(str); } }; MyOtherConstructor.myAlert('FAIL'); 方法。

@Override public ActionMode startActionMode(Callback callback) {

答案 2 :(得分:0)

如果正确解释问题,您可以在static

定义class方法



class C {
  static method() {
    return 123
  }
}

console.log(C.method());