请高手帮忙解释下下面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()); 展开
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()); 展开
2个回答
展开全部
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方法是很愚蠢的事情.
=============================================
还有疑问可以补充
2.传入的this变量在运行时指向new user({name:"小明",age:18,ge:218})实例本身,而JavaScript的对象有类似于字典的键对值特性,所以wit['setAge']等同于wit.setAge.在自执行函数内部不能使用this的原因是,this的指向不同,在自执行函数中的this和外部的this是不一样的.
PS:在JavaScript中使用get和set方法是很愚蠢的事情.
=============================================
还有疑问可以补充
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询