自定义vue(1)

目录

1.Object.defineProperty()的使用

2.举个例子

3.运行


第二篇:自定义vue(2)

1.Object.defineProperty()的使用

        object. defineProperty(对象名,"属性名",参数);实现的双向数据绑定,该方法是es5提供的新功能,不支持ie8及以下版本。

     该方法允许精确地添加或修改对象的属性。

        通过对象赋值操作添加的普通属性是可枚举的,可以改变这些属性的值,也可以删除(如:delete)这些属性。

        这个方法允许修改默认的额外选项(或配置)。默认情况下,使用 Object.defineProperty() 添加的属性值是不可修改(immutable)的。

        对象里目前存在的属性描述符有两种主要形式:数据描述符和存取描述符。数据描述符是一个具有值的属性,该值可以是可写的,也可以是不可写的。存取描述符是由 getter 函数和 setter 函数所描述的属性。一个描述符只能是这两者其中之一;不能同时是两者。

var student = {}
var sex = "男"
Object.defineProperties(student,{
    name:{
        value:"张三",
        writable:false
    },
    age : {
        value : 16,
        writable:true
    },
    sex:{
        get(){
            return sex
        },
        set(v){
            sex = v
        }
    }
})

修饰符

value: 设置属性的值
writable: 值是否可以重写。true | false
enumerable: 目标属性是否可以被枚举。true | false
configurable: 目标属性是否可以被删除或是否可以再次修改特性 true | false
set: 目标属性设置值的方法
get:目标属性获取值的方法
    

2.举个例子

如:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>defineProperty的使用</title>
</head>
<body>
    <div id="name"></div>

    <script>
        var person={
            name:'张三'
        };
        Object.defineProperty(person,'name',{
            configurable:true,//可删除
            enumerable:true,//可枚举
            //writable:true,//可写入,加了set方法实际上就是,所以注掉有冲突
            get(){
                console.log("调用了get方法");
                return document.getElementById('name').innerHTML
            },
            set(val){
                console.log("调用了set方法");
                document.getElementById('name').innerText=val;
            }
        })
    </script>
</body>
</html>

如图,我们把person对象的name属性进行了一些修改,增加了get  set方法

3.运行

当你这样操作的时候,其实会帮你调用name的get方法,至于为什么是空值,是因为我们把name属性进行了修改,你可以指定value来赋新值

 

 当你这样操作的时候,调用了set方法修改了person.name的值,同时页面显示了张三。

第二篇自定义vue(2)

猜你喜欢

转载自blog.csdn.net/qq_59384418/article/details/127211174