在classA函数体外,定义一个
ClassA.propotype.price = 120;
这个就是静态的!

解决方案 »

  1.   


    第一:js中的类也有静态变量。
    第二:js中类的静态变量定义在类对象的prototype中。
    第三:这个例子中的price不是类ClassA的静态变量,只是类ClassA对象的一个属性。
    第四:什么是静态变量?建议好好看看面向对象设计,特别是楼上答案错误的。
    第五:任意一个类ClassA的事例对象都访问不到price属性。
    第六:建议你结贴。
      

  2.   


    好吧,准备结贴!JavaScript 本身也不是一个严格的面向对象的语言,不再深究。有些书籍上说JavaScript没有静态变量,我只是感觉这个类变量很像静态变量,ClassA的实例对象要访问price属性,可以通过 ClassA.price 来访问。如果说“js中类的静态变量定义在类对象的prototype中”,好像也不是 完全准确,静态变量不应该存储在每个实例里面,它应该只存储在一个地方,不是在每个类的实例里面,定义在 prototype 中,等于每个实例对象都存有一个副本。
      

  3.   

    或许定义个js类的静态变量应该这么定义:
    ClassA.price=ClassA.prototype.price='xxx';
    这样就满足了用类名也能访问,任意事例对象也能访问。另外,js中类的静态变量不是每个事例对象都有一个副本,而是每个事例对象公用一个变量。当一个静态属性(变量)为引用型变量时更容易体现出来。var ClassA=function(){};
    ClassA.prototype.x={value:'x'};var b=new ClassA(),c=new ClassA();
    b.x.value='c';
    alert(c.x.value);//这里可以看出b和c的x属性是同一个对象。//另外一种修改方式
    b.x='c';//这个跟上面不太一样,这里修改了对象b的x属性,简单点就是对象b有了自己的x属性,这里x并不是类ClassA静态变量x的副本。有点像继承,但又不能用继承的思路来考虑它。
      

  4.   

    不存在静态变量的概念,
    以js的面向对象来说,函数也是对象,所以只是给ClassA对象增加了一个成员而已就算从效果上,也不是,静态变量是全局的,而这个变量的作用域要看ClassA的作用域,如果ClassA是在局部定义的函数,那它的成员也就同样不具有全局性了
      

  5.   

    js中定义静态变量和静态方法:
        var class=function(){};
        class.staticValue=“”;//定义静态变量
        class.staticMethod=function (){};//定义静态方法
    静态变量和静态方法只能由class来调用,实例不可调用,否则出错。