我想在javascript中模拟静态成员。
考虑这段代码:
// option A for static members:
// constructor...
function Person(name) {
this.firstName=name;
}
Person.count=0; // like a static member...
var p=new Person("Dan");
Person.count++;
alert(Person.count); // 1;
现在这一个:
// option B for static members:
// constructor..
function Person(name) {
this.firstName=name;
Person.prototype.count++;
}
Person.prototype.count=0; // like a static member...
var p=new Person("Dan");
alert(Person.prototype.count); // 1;
// ...
所以,说这两者之间的主要区别是,在第二个例子中,您可以从构造函数中引用静态成员(由于原型 decleration),而在第一个例子中,你不能?
答案 0 :(得分:1)
在这两个示例中,您都可以从构造函数中获取它。不同之处在于您是否可以通过其中一个对象来实现它。
选项A:
function Person (name) {
this.firstName = name;
Person.count++;
}
Person.count = 0;
var p = new Person("Dan")
console.log(Person.count) // 1
console.log(p.count) // undefined
选项B:
function Person (name) {
this.firstName=name;
Person.prototype.count++;
}
Person.prototype.count = 0;
var p = new Person("Dan");
console.log(Person.prototype.count) // 1
console.log(p.count) // 1