关于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方法时,直接赋值即可。例如

http://img.mukewang.com/climg/6077a317094825d404680344.jpg

http://img.mukewang.com/climg/6077a31e096e804d01340027.jpg

3、理解是正确的。

4、是的,get和set无法被循环遍历到。

祝学习愉快!

0

粉墨登场

提问者

2021-04-14

老师,再追问一条:不管是ES5还是ES6中通过任何形式添加的set和get,是不是都是无法被循环遍历到的?

0

0 学习 · 10739 问题

查看课程