有两种方式使用 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 的低版本浏览器则只能用轮询的方式来搞了。

ES5 的 setter 和 getter的更多相关文章

  1. 【原】iOS 同时重写setter和getter时候报错:Use of undeclared identifier '_name';did you mean 'name'

    写了那么多的代码了,平时也没有怎么注意会报这个错误,因为平时都很少同时重写setter和getter方法,一般的话,我们大概都是使用懒加载方法,然后重写getter方法,做一个非空判断.然后有时候根据 ...

  2. OC中实例变量可见度、setter、getter方法和自定义初始化方法

    在对类和对象有一定了解之后,我们进一步探讨实例变量的可见度等相关知识 实例变量的可见度分为三种情况:public(共有),protected(受保护的,默认),private(私有的),具体的不同和特 ...

  3. ios特性访问器方法(setter和getter)

    Employee.h @interface Employee:NSObject { int _employeeNumber; NSString *_name; Employee*_supervisit ...

  4. 如果将synthesize省略,语义特性声明为assign retain copy时,自己实现setter和getter方法

    如果将synthesize省略,并且我们自己实现setter和getter方法时,系统就不会生成对应的setter和getter方法,还有实例变量 1,当把语义特性声明为assign时,setter和 ...

  5. form与action之setter与getter(转)

    对于表单提交数据给action时候,可以简单的用setter与getter函数实现值的传递. 例如在jsp里有这么个form: <s:form action="login"& ...

  6. 【Java基础】setter与getter方法

    //下面代码实现设置和获取学生姓名和成绩. class lesson5homework { public static void main(String[] args) { TestCode TC=n ...

  7. 假设将synthesize省略,语义特性声明为assign retain copy时,自己实现setter和getter方法

    假设将synthesize省略,而且我们自己实现setter和getter方法时,系统就不会生成相应的setter和getter方法,还有实例变量 1,当把语义特性声明为assign时,setter和 ...

  8. 假设synthesize省略,语义属性声明assign retain copy时间,为了实现自己的setter和getter方法

    假设synthesize省略,而且我们自己实现setter和getter方法时,系统就不会生成相应的setter和getter方法,还有实例变量 1,当把语义特性声明为assign时,setter和g ...

  9. OC—Setter、Getter

    一.本篇以Setter和Getter 来进行成员变量的赋值. 二.Setter 与 Getter 1. 命名规范 为对象中的某个实例变量赋值的方法称为修改方法,用来修改对象的状态这类修改方法称为set ...

随机推荐

  1. 分享我基于NPOI+ExcelReport实现的导入与导出EXCEL类库:ExcelUtility (续3篇-导出时动态生成多Sheet EXCEL)

    ExcelUtility 类库经过我(梦在旅途)近期不断的优化与新增功能,现已基本趋向稳定,功能上也基本可以满足绝大部份的EXCEL导出需求,该类库已在我们公司大型ERP系统全面使用,效果不错,今天应 ...

  2. WPF模糊效果(BlurEffect)

    <TextBlock Padding="10" Text="设置模糊" FontSize="32" Background=" ...

  3. .Net语言 APP开发平台——Smobiler学习日志:实现手机上常见的ListMenuView

    最前面的话:Smobiler是一个在VS环境中使用.Net语言来开发APP的开发平台,也许比Xamarin更方便 一.目标样式 我们要实现上图中的效果,需要如下的操作: 1.从工具栏上的"S ...

  4. nginx.conf

    #user nobody;worker_processes 4; #nginx进程数,建议设置为等于CPU总核心数 #error_log logs/error.log;#error_log logs/ ...

  5. ASP.NET MVC搭建项目后台UI框架—3、面板折叠和展开

    目录 ASP.NET MVC搭建项目后台UI框架—1.后台主框架 ASP.NET MVC搭建项目后台UI框架—2.菜单特效 ASP.NET MVC搭建项目后台UI框架—3.面板折叠和展开 ASP.NE ...

  6. Java基础知识回顾

    Java回顾之I/O Java回顾之网络通信 Java回顾之多线程 Java回顾之多线程同步 Java回顾之集合 Java回顾之序列化 Java回顾之反射 Java回顾之一些基础概念 Java回顾之J ...

  7. jquery选项卡

    用jquery实现选项卡功能 css部分: html部分: 记得一定要引入jquery文件 jquery部分:

  8. iOS 线程间的通信 (GCD)

    1.从网络上 下载一张图片将它显示在view上 - (void)imageDownload { dispatch_async(dispatch_get_global_queue(DISPATCH_QU ...

  9. SharePoint 2013 文档库中PPT转换PDF

    通过使用 PowerPoint Automation Services,可以从 PowerPoint 二进制文件格式 (.ppt) 和 PowerPoint Open XML 文件格式 (.pptx) ...

  10. Sharepoint学习笔记—习题系列--70-576习题解析 -(Q138-Q140)

    Question  138 You are designing a SharePoint 2010 application that will deploy a Web Part assembly. ...