我知道我可以使用构造函数创建一个构造函数,例如
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/