JS 的一个疑惑

今天遇到一个迷惑的问题,是关于特权方法的,请看下面的代码:

function User(properties){
    for (var p in properties){
        (function(which){
            var py = p;
            which["get"+py] = function(){
                return properties[py];
            } 
            
            which["set"+py] = function(val){
                properties.py = val;
                alert(properties.py);//3. 我检测了这里,输出是louis
            }
        })(this);
    }
}
var user = new User({name: "Bob", age:44})
user.getname()//1. 输出为"Bob"
user.setname("louis")//2. 打算用此方法设置user实例的name属性
user.getname()//4. 结果,输出还是"Bob"

我动态生成了实例的方法,打算是用user.setname("louis")去修改user这个实例的name属性。

在第三步上面一行,我尝试修改代码为which.py = val;还是输出为Bob,想不通为什么

function User(properties) {
for ( var p in properties) {
(function(which) {
var py = p;
which["get" + py] = function() {

        alert(properties[py]+"111111111");
            return [color=red]properties.py[/color]; 
        }

        which["set" + py] = function(val) {
            [color=red] properties.py [/color]= val;

             alert(properties.py);//3. 我检测了这里,输出是louis   

        }
    })(this);
}

}
var user = new User( {
name : "Bob",
age : 44
})
user.getname()
//1. 输出为"Bob"

user.setname("louis")
//2. 打算用此方法设置user实例的name属性

alert(user.getname()+"5555")//4. 结果,输出还是"Bob"

2个标红色的地方要都是 properties.py 或者都是properties[py]

写法太奇怪了,不清楚你要实现什么功能,不过你代码中的py只取最后一次的p,正确的写法应该是这样
[code="javascript"]
function User(properties){

for (var p in properties){

(function(which, py){

which["get"+py] = function(){

return properties[py];

}

        which["set"+py] = function(val){  
            properties.py = val;  
            alert(properties.py);//3. 我检测了这里,输出是louis  
        }  
    })(this, py);  
}  

}

[/code]

properties.py = val;
改为
properties[py] = val;