set,get

103 阅读1分钟

setter 修改器属性 getter 访问器属性

       setter 修改器属性
       getter 访问器属性
      // 在新建的对象中添加seter和getter 写法
        var obj = {

            _num: 1,

              设置属性  像函数,有且仅有一个参数,不能有返回值

            set num(value) {

                this._num = value

            },
            访问属性
            get num() {

                return this._num

            }

        }

        /*

        1.属性  值    存储和获取值

        2.方法  函数  可以执行多条语句,不能用来赋值和获取值




        
       setter 修改器属性,  getter 访问器属性 优点    既具备属性的存储设置值,获取值的特征,
                                                           可以执行多条语句
         在对象中如果只有一个set,没有get,这种叫做只写,不能读取
             在对象中如果只有一个get,没有set,这种叫做只读,不能设置

      */
      
      

例子

      div 是小方块,这个案例是让小方块移动移动
          var div=document.querySelector("div");
          Object.defineProperties(div,{

            _x:{

                writable:true,//值可以被修改

                value:0

            },

            _y:{

                writable:true,

                value:0

            },

            x:{
            // set 与get缺一,案例就动不起来
              //没了set  div.x打印是0
                set(value){

                    this.style.left=value+"px"

                    this._x=value

                },
                //没了get ,  div.x打印是undefind
                get(){

                    return this._x

                }




            },

            y:{

                set(value){

                    this.style.top=value+"px"

                    this._y=value

                },

                get(){

                    return this._y

                }

            }

        })

        setInterval(function(){

            div.x++

            div.y++

        },16)
        
        

例子2

        var div=document.querySelector("div");

        // 只能在已有的对象上添加setter和getter 已有对象就是指的获取div标签

        Object.defineProperty(div,"w",{

            configurable:true,

            enumerable:true,

            // 当给w属性赋值时,就会执行set方法,并且把值传给value

            // set方法有且仅有一个参数,就是赋值的结果

            set(value){

                console.log("设置")

                if(!/px/.test(String(value))) value+="px"

               // 返回一个数组 里面是去掉px的数字 并把值赋给this.w

                this._w=Number(value.slice(0,-2));

                //改变元素宽度

                 this.style.width=value;



            },

            // 当获取w属性时,就会调用这个get方法,并且返回结果,所以get必须要有个return的结果

            get(){

                console.log("获取")



                return this._w;



            }

        })
        对象初始值
        div.w="300px";
        setInterval(function(){
         
            div.w++;
        },16);