技术答案是否定的。原型函数的底层实现与类 C 语言中静态方法的实现不同。
...但是,在实践中,您可以认为它们的一般用法类似于public-static
方法。
与公共静态成员相比,原型属性更相似。
它们的调用方式不同,但是位于“类”/构造函数上的方法或属性的概念,每个实例都可以访问,并且将这些值修改为共享值,影响所有其他实例非常,很像一个public static
。
但是,还有其他一些事情需要记住,这将与您认为的功能一致public static
,具体取决于您使用的语言......
当然,最重要的是,就原型函数而言,它们绝对无法访问任何不可公开访问的私有/实例特定状态。
因此,如果您习惯于处理public static
可能能够调用私有方法或使用特定于实例的变量(不是公共成员)的函数,那么您将 120% 不走运。
要考虑的第二件事是,您还可以通过闭包创建等效的公共和私有静态成员/方法。
var Class = (function () {
var private_static_method = function () {},
public_static_method = function () {},
private_static_property = 1,
public_static_property = 2,
class_constructor = function (a, b) {
var private_method = function () {},
public_method = function () {},
public_property = a,
private_property = b,
public_interface = {
method : public_method,
property : public_property
};
return public_interface;
};
class_constructor.method = public_static_method;
class_constructor.property = public_static_property;
return class_constructor;
}());
现在,通过闭包,我得到了每个私有实例都可以访问的“私有静态”函数和属性。
我有公共静态方法,我已将其作为构造函数的方法附加。
然后我得到了不使用的构造函数new
,只是创建了一个新对象(public_interface
),它可以附加你想要的任何东西。
由于闭包,实例的任何公共方法都可以访问该实例的任何私有方法/变量。
这些都与传统课程无关。
但从纯粹基于闭包的角度来看,这就是您可以重新创建所有这些访问类型的方法,而不会让自己发疯,试图将类硬塞到 JS 中。