请高手帮忙解释下下面JS,帮帮我这个JS初学者

这样写是没问题的,但有两个疑问,1:forin里的i是代表遍历的对象的属性名,但是把下面的P直接换成i,结果却是只打出18,也就是最后一个属性的值,这里就想不通了,i不是... 这样写是没问题的,但有两个疑问,
1: for in 里的i 是代表遍历的对象的属性名,但是把下面的P直接换成i,结果却是只打出18,也就是最后一个属性的值,这里就想不通了,i不是代表for in中当前的属性名吗?为什么换成P的话,就会能把所有的属性值都能打出来呢?请高手能不能说下其中的过程。

2:for in {}里的自执行函数里的wit参数传入了this, 这个this指的是什么呢,是整个user对象吗?如果是的话,下面的 wit["get"+p ]=function(){};这个创建的成员方法为什么会是wit[]呢,创建对象的成员方法不是要在方法名前加 this, 吗?为什么加这个[]呢,而把这个自执行函数里的wit换成user,或换成this都不行。 这点也是不能理解!请高手帮忙解释下。

3:希望大侠能帮帮我这个JAVASCRIPT初学者。

function user(pro){
for(var i in pro){
(function(wit){
var p =i;
wit["get"+ i]=function(){
return pro[p]
};
wit["set"+i]=function(newage){
return pro[p]=newage;
}
})(this)
}
}
var xiaoming=new user({name:"小明",age:18,ge:218});
alert(xiaoming.getge());
alert(xiaoming.getage());
alert(xiaoming.getname());
展开
 我来答
帐号已注销
2012-10-01 · TA获得超过616个赞
知道小有建树答主
回答量:319
采纳率:0%
帮助的人:393万
展开全部
1.这里涉及到一个关于闭包的概念,由于变量p是在function中定义的局部变量,所以它的值会一直保留下来,而i定义时的域不同,无法闭包保留变量.

2.传入的this变量在运行时指向new user({name:"小明",age:18,ge:218})实例本身,而JavaScript的对象有类似于字典的键对值特性,所以wit['setAge']等同于wit.setAge.在自执行函数内部不能使用this的原因是,this的指向不同,在自执行函数中的this和外部的this是不一样的.

PS:在JavaScript中使用get和set方法是很愚蠢的事情.
=============================================
还有疑问可以补充
wuhuilong123
2012-10-01 · TA获得超过327个赞
知道小有建树答主
回答量:574
采纳率:0%
帮助的人:347万
展开全部
你想搞懂 这个原理的话,我建议你打电话去微软,你都说你是JS初学者,你问这些 你没发现你是 没学会走, 就想跑么?

你直接说你想实现什么。或者想得到什么效果,看看我能不能帮你如果你是问原理的话,抱歉,爱莫能助了。
追问
这个代码是正确的,  只是不理解他为什么这样写,学JS不就是理解他吗,不然照模子抄有什么意思,这个就是基础啊,并没有什么特别深的逻辑和其他的什么啊
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式