zoukankan      html  css  js  c++  java
  • getter & setter

    ECMAScript 5:

    setter和getter的使用方式:

    1.set/get:

    1 var person = {
    2     _name: '',
    3     get name() { return this._name },
    4     set name(n) { this._name = n }
    5 }
    6  
    7 // 测试
    8 person.name // ''
    9 person.name = 'john' // 'john', 此时 person._name 也变成了 'john'

    2.Object.defineProperty

     1 var person = {}
     2 var name = ''
     3 Object.defineProperty(person, 'name', {
     4     configurable: true,
     5     enumerable: true,
     6     get: function() {
     7         return name
     8     },
     9     set: function(n) {
    10         name = n
    11     }
    12 })
    13  
    14 // 测试
    15 person.name //''
    16 person.name = 'john' // 'john',此时全局的 name 也变成了 'john'

     对于setter和getter的使用场景:

    1.私有变量

     1 // 私有变量
     2 var person = function() {
     3     var _name = ''
     4     var _age  = 0
     5     return {
     6         get name() { return _name },
     7         set name(n) { _name = n },
     8         get age() { return _age },
     9         set age(a) { _age = a }
    10     }
    11 }()

    OR

     1 // 私有变量
     2 var person = function() {
     3     var _name = ''
     4     var _age  = 0
     5     var obj = {}
     6     Object.defineProperty(obj, 'name', {
     7         configurable: true,
     8         enumerable: true,
     9         get: function() {
    10             return _name
    11         },
    12         set: function(n) {
    13             _name = n
    14         }
    15     })
    16     Object.defineProperty(obj, 'age', {
    17         configurable: true,
    18         enumerable: true,
    19         get: function() {
    20             return _age
    21         },
    22         set: function(a) {
    23             _age = a
    24         }
    25     }) 
    26     return obj
    27 }()

    2.数据绑定 (MVxx等框架的原理)

    模板中每个指令/数据绑定都有一个对应的 watcher 对象,在计算过程中它把属性记录为依赖。之后当依赖的 setter 被调用时,会触发 watcher 重新计算 ,也就会导致它的关联指令更新 DOM

    贴一张vue的追踪数据的图:

     

     

  • 相关阅读:
    .net实现依赖注入
    Model Validation(模型验证)
    TCP应用
    Jquery框架
    Fiddler工具
    Oracle从11.2.0.2开始,数据库补丁包是一个完整安装包(转)
    java路径中的空格问题(转)
    分析Java的类加载器与ClassLoader(二):classpath与查找类字节码的顺序,分析ExtClassLoader与AppClassLoader的源码
    java中path和classpath
    velocity-1.7中vm文件的存放位置
  • 原文地址:https://www.cnblogs.com/xinxingyu/p/5503033.html
Copyright © 2011-2022 走看看