我另举一个例子吧:
function newClass()
{
  this.author = "meizz";
}
newClass.newProperty = "newProperty";
newClass.prototype.name = "csdn";var a = new newClass();
alert(a.name);  //返回正确的 csdn  //后期通过原型prototype添加的,可以被继承
alert(a.author);//返回正确的 meizz //原来就有的成员属性
//alert(a.newProperty);  //出错,无法访问到。
alert(newClass.newProperty); //可以访问到,
后者这种方法,只是对 newClass 这个对象添加一个属性,是静态的,不需要new 初始华就可以调用的,且不能访问newClass类里的其它成员

解决方案 »

  1.   

    谢谢你的回复,你看我下面说的对不对
    function newClass(){}newClass.newProperty = "newProperty";为静态的newClass.prototype.name = "csdn";是为这个类的所有对象添加一个属性var a = new newClass();
    a.name="csdn";这个是指只为a这个对象添加属性,这个类的其他对象访问不到a.name这个属性对不对?
      

  2.   

    var element = document.getElementById(elementId);
    element.prototype.echoDomPropertyStore = new Array();
    这样的用法应该会报错,这个问题应该是涉及到一个原型继承问题。
    对于prototype属性只是函数对象才有,其他对象是没有的,因此element.prototype应该会报错。newClass.newProperty = "newProperty"; //为构造函数添加一个属性,相当于类变量,因此调用时也应该用'类名.属性名'方式调用,而不是通过类的实例加属性名来调用newClass.prototype.name="csdn"  //为构造函数的protoype对象添加一个属性,对于一个类来说都有一个构造函数,比如这里的function newClass即为类newClass的构造函数,而函数都有一个默认的prototype对象(初始为空的object对象)这个语句即为newClass对象添加了一个属性。对于每个newClass的实例,调用属性时首先查看本身的构造函数中是否定义了该属性,如果没有,则到它的原型对象(prototype对象)中查看是否有该属性,如果有则继承。
    var a = new newClass(); //实例化了一个类newClass对象,a本身没有name属性,但是可以原型对象中继承,因此这时你要调用a.name也是正确的a.name="csdn";//刚刚说了a本身没有name属性,这里实际上是为a添加了一个name的属性,由于a有了一个name的属性,所以它就不再继承原型对象的name属性了,但是注意这里只为实例化a对象添加了一个name属性,而不是为所有的newClass类对象都添加一个name属性,因此如果有其他的newClass实例,他们的name属性仍然继承原型对象的name属性。 
      

  3.   

    newClass.prototype.name="csdn"  //为构造函数的protoype对象添加一个属性,对于一个类来说都有一个构造函数,比如这里的function newClass即为类newClass的构造函数,而函数都有一个默认的prototype对象(初始为空的object对象)这个语句即为newClass对象添加了一个属性。newClass.prototype.name="csdn"  //为构造函数的protoype对象添加一个属性,对于一个类来说都有一个构造函数,比如这里的function newClass即为类newClass的构造函数,而函数都有一个默认的prototype对象(初始为空的object对象)这个语句即为newClass函数的prototype对象添加了一个属性。