浏览 2893 次
锁定老帖子 主题:JS 疑惑
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2014-05-18  

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

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,想不通为什么。

   发表时间:2014-05-19  
这一行 properties.py = val;
应该为 properties[py] = val;
1 请登录后投票
   发表时间:2014-05-19  
tonyant 写道
这一行 properties.py = val;
应该为 properties[py] = val;

嗯,多谢。
0 请登录后投票
   发表时间:2014-05-24  
tonyant 写道
这一行 properties.py = val;
应该为 properties[py] = val;

能不能具体说一下这两种代码的区别
0 请登录后投票
   发表时间:2014-05-26  
properties[py],这里的py可以是变量;properties.py,这里的py是字符串,给properties增加了一个名字是‘py’的属性,点后面不能跟变量。
这是测试出来的,具体说明在哪我也不清楚:)
0 请登录后投票
论坛首页 Web前端技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics