zoukankan      html  css  js  c++  java
  • ES5 的 setter 和 getter

    有两种方式使用 setter 和 getter

    1. set/get

    var person = {
    	_name: '',
    	get name() { return this._name },
    	set name(n) { this._name = n }
    }
    
    // 测试
    person.name // ''
    person.name = 'john' // 'john', 此时 person._name 也变成了 'john'
    

    2. Object.defineProperty

    var person = {}
    var name = ''
    Object.defineProperty(person, 'name', {
    	configurable: true,
    	enumerable: true,
    	get: function() {
    		return name
    	},
    	set: function(n) {
    		name = n
    	}
    })
    
    // 测试
    person.name // undefind 
    person.name = 'john' // 'john',此时全局的 name 也变成了 'john'
    

    当然,通常用 setter 和 getter 来实现私有变量

    // 私有变量
    var person = function() {
    	var _name = ''
    	var _age  = 0
    	return {
    		get name() { return _name },
    		set name(n) { _name = n },
    		get age() { return _age },
    		set age(a) { _age = a }
    	}
    }()
    

    或者

    // 私有变量
    var person = function() {
    	var _name = ''
    	var _age  = 0
    	var obj = {}
    	Object.defineProperty(obj, 'name', {
    		configurable: true,
    		enumerable: true,
    		get: function() {
    			return _name
    		},
    		set: function(n) {
    			_name = n
    		}
    	})
    	Object.defineProperty(obj, 'age', {
    		configurable: true,
    		enumerable: true,
    		get: function() {
    			return _age
    		},
    		set: function(a) {
    			_age = a
    		}
    	})	
    	return obj
    }()
    

    当然,setter 和 getter 最牛逼的用处是用来实现目前流行的 “双向绑定”,MVxx之类的库。不支持 setter 和 getter 的低版本浏览器则只能用轮询的方式来搞了。

  • 相关阅读:
    jmeter在Windows下安装(含插件安装)
    Jenkins中agent的使用
    Jenkins自动化测试脚本的构建
    Python在Linux下编译安装
    Jenkins项目构建运行
    VIM不正常退出产生的swp文件
    SSI服务器端包含注入
    【强网杯2019】随便注
    判断网站CMS
    windows基础
  • 原文地址:https://www.cnblogs.com/snandy/p/5283837.html
Copyright © 2011-2022 走看看