我知道我可以使用像
这样的构造函数创建一个构造函数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()
) 。有没有办法在自定义构造函数中声明类似的函数?
答案 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());