'实例成员之间的差异'和共享' class'成员对我来说是显而易见的,使用其中一个的时间也是如此。但是我最近遇到了静态成员的概念,它在Javascript中只是构造函数本身的方法/属性,通过this
对任何实例都不可用。为清楚起见,这就是我所说的:
var Constructor = function() {
// Private instance members
var private = 'I am private';
// Public instance members
this.public = 'I am public';
};
// Shared class members
Constructor.prototype.shared = 'I am shared';
// So-called 'static' member
Constructor.static = 'I am static';
var f = new Constructor();
f.private; // undefined
f.public; // 'I am public'
f.shared; // 'I am shared'
f.static; // undefined
像我说的那样,前三者的目的和界定是显而易见的。但是,何时应该使用静态成员? Foo.bar()
什么时候比让它成为班级的共享方法更好:Foo.prototype.bar()
?
我理解原型链,所以明显不同的是静态成员不是实例原型链的一部分 - 我想这在某些应用程序中可能很重要。但那不是问题。问题是,创建这样的静态成员的一个(或多个)好的,真实的例子是什么?
答案 0 :(得分:2)
创建这样的“静态成员”的一个(或多个)好的,现实世界的例子是什么?
语言本身有一些很好的例子。例如(除了这两个之外还有很多):
Array.isArray([]); // true
Object.keys(someObj); // Returns array of key identifiers
静态属性对于提供与不依赖于实例的“类型”(上例中的数组或对象)相关联的功能非常有用。
答案 1 :(得分:1)
当您需要在对象的所有实例中共有的值时,静态属性很适合。作为一个简单的示例,您可以Constructor.numberOfTimesInstantiated
每次调用new Constructor
时加1。