首先呢,(function(which){})(this)这句的意思是:
function(which){}  //声明一个匿名方法
(function(which){})  //返回该方法的引用
(function(which){})(this)  //以当前闭包中的this为参数调用该方法这段方法,当你 var user = new User(properties)的时候,会为这个新的user实例添加get和set方法,不过这里有一个漏洞就是set和get都是对properties这对个object的引用,如果这个东东发生了变化,则set和get也会变化。还有一点要注意的就是这样做,properties是不会作为该User的成员出现的。老实说,写得挺晦涩阿。另外,这里which("get" + i),which("set" + i),不知道是不是写错了,应该写成 which["get" + i],which["set" + i] ?