我的问题不是关于对象成员和原型成员之间的区别。我明白那个。我认为它类似于C#对象成员和类中的静态成员。
我的问题是关于构造函数上的成员与原型对象上的之间的区别。与C#相比,它们都是“静态的”。那么区别是什么呢?我只是观察到,原型成员可以直接在实例上调用,也可以在Constructor.prototype上调用。构造函数成员只能在构造函数上调用。 何时使用哪种方法?
为了说明这一点,想象一下我需要人数。
使用构造函数成员的示例:
function Person () {
Person.countOfCreatedPersons = (Person.countOfCreatedPersons || 0) + 1;
}
Person.Count = function () {
return Person.countOfCreatedPersons;
}
var p = new Person();
alert(Person.Count());
使用原型成员的示例:
function Person () {
Person.prototype.countOfCreatedPersons = (Person.prototype.countOfCreatedPersons || 0) + 1;
}
Person.prototype = {
Count: function () {
return this.countOfCreatedPersons;
}
}
var p = new Person();
alert(Person.prototype.Count()); // or p.Count()
答案 0 :(得分:0)
将属性添加到对象的原型时,从该原型继承的每个对象都具有以下属性:
function Ob(){};
Ob.prototype.initialised = true;
var ob1 = new Ob();
alert(ob1.initialised); //true!
alert(Ob.initialised); //undefined;
如果将其添加到构造函数中,则类似于静态属性。 Instances 将无法访问它们。
function Ob2(){};
Ob2.initialised = true;
var ob2 = new Ob2();
alert(ob2.initialised); //undefined
alert(Ob2.initialised); //true
此外,如果向原型添加方法,方法内的this
变量将指向您的对象(您使用new
创建的类的实例)。对于类方法:
function Obj() {
this.value = 1;
}
Obj.prototype.getValue = function() {
return this.value;
};
Obj.getValue = function() {
return this.value;
};
var ob3 = new Obj();
alert(ob3.getValue()); //'1'!
alert(Obj.getValue()); //undefined!
希望这能解释。