一个类是用javascript编写的。我用不同的其他脚本创建它的对象。但我需要它的一个数据成员(数组)是静态的? 每次我创建该类的新对象,那么它不应该丢失该数组数据..我需要旧的数组数据......
答案 0 :(得分:3)
您可以使用构造函数上的属性模拟静态成员。在下面的示例中,我们有一个带有构造函数Foo
的伪类。当我们创建一个Foo实例时,对该实例的引用被添加到Foo的静态instances
属性中。
function Foo () {
this.description = ' this is the Foo class';
Foo.instances.push(this); // static member keeps ref to each instance
};
// this is an instance member
Foo.prototype.getDescription = function () {
return this.description;
}
// this is a static member
Foo.instances = [];
所以我们在这里真正讨论的是使用构造函数作为'命名空间'来保存与'class'有某种关系的变量。它比使用全局变量更好,因为它有点清洁。正如其他人所说的那样,没有这样的类,但是如果你想以一种经典的方式思考,这种模式在概念上接近静态成员。
答案 1 :(得分:2)
只需创建一个全局变量。
<script>
var myGlobalArray = [];
</script>
答案 2 :(得分:1)
诀窍是创建一个私有变量并在构造函数中定义原型方法,以便能够在闭包中使用私有变量。
那么,这可能接近你想要的吗?
function Foo(){
var staticArr = [];
if (!('prototypemethodsset' in Foo)){
var proto = Foo.prototype;
proto.getArr = function(){
return staticArr;
};
proto.addArr = function(){
staticArr.push(Array.prototype.slice.call(arguments));
};
proto.prototypemethodsset = true;
}
}
var f = new Foo
, g = new Foo;
f.addArr(1,4,8,9,13,7);
g.addArr(5,7);
alert(g.getArr()); //=> 1,4,8,9,13,7,5,7
alert(f.getArr()); //=> 1,4,8,9,13,7,5,7