var StaticClass = (function(){
var r = {
property : 'static property', 
method : function(){
alert(privateProperty); 
privateMethod();
}
}
var privateProperty = 'private property';
var privateMethod = function(){
alert(r.property);
}
return r; })(); StaticClass.method();
StaticClass.property = 'another static property';
StaticClass.method();这样定义的静态类, 我有一个疑问, 为什么能够通过StaticClass.property = 'another static property'来改变r的property属性, 而随后的StaticClass.method没有将这个属性重置成'static property'呢? StaticClass里的var r = {};这段代码为什么只执行了一次?

解决方案 »

  1.   

    因为你写的是一个立即执行的匿名函数,所以只执行了一次,当你在声明StaticClass变量的时候就已经执行了。StaticClass其实就是匿名函数里面的那个r对象。
      

  2.   

    js没有静态类,你这个只是一个函数,返回一个对象罢了你返回的就是r对象,引用类型,这个有面向对象基础的都知道吧,肯定会影响的,因为根本就是同一个对象;
    也没有静态属性的说法,你用函数内部的局部变量,在外部就不能改变了,js的面向对象需好好了解一下先