关于set和get
来源:3-4 getter 与 setter(1)
粉墨登场
2021-04-14 22:07:47
问题描述:
老师你好,如下给出的代码中,是不是因为调用name时因为设置了get,所以是调用get设置的这个函数,而不是获取obj中的name属性。也就是说如果set或者get设置的方法名与对象中的属性名称重名了,那默认先调用get或者set。 因为get设置的函数中返回的是obj的name,又因为重名了,所以还是继续调用get设置的函数,就这么无限循环无止尽地下去,因此会报错说爆栈。只要将get设置的函数名与name属性不一样就正常了?
第二个问题:调用set设置的函数时,不能以函数调用的方式,我试了一下会报错:说不是一个函数,要以赋值的形式给值?
第三个问题:get和set设置的函数,不能以函数调用的形式调用,虽然是一个函数,需要以访问对象属性的方法调用get,以给对象属性赋值的方式调用set? obj.name; 这是调用get。 obj.name = 10; 这是调用set
相关代码:
var obj = {
name: '',
get name () {
return this.name;
},
set name (val) {
this.name = val;
}
};
obj.name;
2回答
好帮手慕星星
2021-04-15
同学你好,问题解答如下:
1、是的,可以这样理解,函数名与属性名不一致就可以。
2、是的,调用set方法时,直接赋值即可。例如

3、理解是正确的。
4、是的,get和set无法被循环遍历到。
祝学习愉快!
粉墨登场
提问者
2021-04-14
老师,再追问一条:不管是ES5还是ES6中通过任何形式添加的set和get,是不是都是无法被循环遍历到的?
相似问题