zoukankan      html  css  js  c++  java
  • 浅析vue的双向数据绑定

    vue 的双向数据绑定是基于es5的 object对象的defineProperty属性,重写data的set和get函数来实现的。
    1、defineProperty 数据展示

     1 Object.defineProperty(obj,'name',{
     2    configurable:true , // false则不可以删除key值
     3    enumerable:true , // false则在枚举时候会忽略
     4    value:'xixi'
     5    writable:true  // false则不可更改key的value值
     6 });
     7 
     8 //writable为false
     9 var obj = {};
    10 Object.defineProperty(obj,'name',{
    11     value:'xixi'
    12     writable:false,   
    13     configurable:true , 
    14     enumerable:true , 
    15 });
    16 obj.val = '西瓜';//writable为false,不可以更改。
    17 
    18 //configurable为false
    19 var obj = {};
    20 Object.defineProperty(obj,'name',{
    21     value:'xixi'
    22     writable:true,   
    23     configurable:false , 
    24     enumerable:true , 
    25 });
    26 obj.val = '西瓜'27 delete obj.val //configurable为false,不可以删除。
    28     
    29 //enumerable为false
    30 var obj = {};
    31 Object.defineProperty(obj,'name',{
    32     value:'xixi'
    33     writable:true,   
    34     configurable:true , 
    35     enumerable:false , 
    36 });
    37 for(var i in obj) {
    38   console.log(obj[i])  // enumerable为false时,不会显示值
    39 }
    View Code

    2、存取器描述

    1 var obj = {};
    2 Object.defineProperty(obj,'name',{
    3     get:function(){} | undefined,
    4     set:function(){} | undefined,
    5     configuracble:true | false,
    6     enumerable:true | false
    7 })
    8 //当前使用了setter和getter方法,不许使用writable和value两个属性

    当设置获取对象的某个属性的时候,可以提供getter和setter方法

     1 var obj = {};
     2 var value = 'xixi';
     3 object.defineProperty(obj, 'name', {
     4    get: function() {
     5        return value  
     6    },
     7    set: function(val) {
     8        value = val    
     9    }  
    10 })
    11 console.log(obj.name) // xixi
    12 obj.name = '西瓜';
    13 console.log(obj.name) // 西瓜

  • 相关阅读:
    JAVA URI URL 区别
    超轻量级DI容器框架Google Guice与Spring框架的区别教程详解及其demo代码片段分享
    开源框架:Apache的DBUtils框架
    java url openConnection get post 请求
    java 使用jxl poi 操作excel
    如何用Curl 来post xml 数据
    Linux Shell脚本编程--Linux特殊符号大全
    linux查看各服务状态以及开启和关闭
    eclipse中点不出来提示
    cocos2dx切换场景
  • 原文地址:https://www.cnblogs.com/mxyr/p/9507043.html
Copyright © 2011-2022 走看看