我们常用的实现方法可能是这样的:

function Field(val){
var value = val; this.getValue =function(){
return value;
}; this.setValue =function(val){
value = val;
};
}
var field =new Field("test");
field.setValue("test2")
field.getValue() // return "test2"

标准的Get和Set访问器的实现:

function Field(val){
this.value = val;
}
Field.prototype = {
get value(){
returnthis._value;
},
set value(val){
this._value = val;
}
};
var field =new Field("test");
field.value="test2";
//field.value will now return "test2"

在DOM元素上Get和Set访问器的实现

HTMLElement.prototype.__defineGetter__("description", function () {
returnthis.desc;
});
HTMLElement.prototype.__defineSetter__("description", function (val) {
this.desc = val;
});
document.body.description ="Beautiful body";
// document.body.description will now return "Beautiful body";

通过Object.defineProperty实现访问器

Object.defineProperty(obj, prop, descriptor)

参数:

obj:目标对象

prop:需要定义的属性或方法的名字。

descriptor:目标属性所拥有的特性。

可供定义的特性列表:

  • value:属性的值
  • writable:如果为false,属性的值就不能被重写。
  • get: 一旦目标属性被访问就会调回此方法,并将此方法的运算结果返回用户。
  • set:一旦目标属性被赋值,就会调回此方法。
  • configurable:如果为false,则任何尝试删除目标属性或修改属性以下特性(writable, configurable, enumerable)的行为将被无效化。
  • enumerable:是否能在for...in循环中遍历出来或在Object.keys中列举出来。
var lost = {
loc : "Island"
};
Object.defineProperty(lost, "location", {
get : function () {
returnthis.loc;
},
set : function (val) {
this.loc = val;
}
});
lost.location ="Another island";
// lost.location will now return "Another island"

JavaScript中Get和Set访问器的实现的更多相关文章

  1. JavaScript中的数据属性和访问器属性

    在学习JavaScript原型(prototype)和原型链(prototype chain)知识的时候,发现数据属性和访问器属性的重要性,通过不断的查找相关知识,浅显理解如下,若有差错,希望不吝赐教 ...

  2. Js中的数据属性和访问器属性

    Js中的数据属性和访问器属性 在javaScript中,对象的属性分为两种类型:数据属性和访问器属性. 一.数据属性 1.数据属性:它包含的是一个数据值的位置,在这可以对数据值进行读写. 2.数据属性 ...

  3. javascript对象属性——数据属性和访问器属性

    ECMA-262第五版在定义时,描述了属性property的各种特征,定义这些特性是为了实现javascript引擎用的,为了表示该特性是内部值,规范把它们放在了两对儿方括号中,例如[[Enumera ...

  4. JavaScript 属性类型(数据属性 访问器属性)

    ECMA-2把对象定义为:“无序属性的集合,其属性可以包含基本值.对象或者函数.” 严格来说,这就相当于说对象是一组没有特定顺序的值.对象的属性或方法都有一个名字,而每个名字映射到一个值.我们可以把E ...

  5. ECMAScript 5中的数据属性和访问器属性

    简介 ECMAScript 定义的对象中有两种特殊的属性, 这两种特殊的属性在你定义对象属性时就会赋予, 我们在必要时可以改写这两种特殊的属性让其属性的访问更加的合理化, 这两种特殊的属性称呼及作用如 ...

  6. javascript中uber实现子类访问父类成员

    function Animal(){} Animal.prototype={ name:"animal", toString:function(){ console.log(thi ...

  7. javaScript中对象属性的访问

    有两种方式访问对象属性,一个是点操作符(.),一种是中括号操作符([ ]). 当你知道属性的名称时,使用点操作符: var myObj = { prop1: "val1", pro ...

  8. 深入理解JavaScript中的闭包

    闭包没有想象的那么简单 闭包的概念在JavaScript中占据了十分重要的地位,有不少开发者分不清匿名函数和闭包的概念,把它们混为一谈,我希望借这篇文章能够让大家对闭包有一个清晰的认识. 大家都知道变 ...

  9. 深入理解javascript中实现面向对象编程方法

    介绍Javascript中面向对象编程思想之前,需要对以下几个概念有了解: 1. 浅拷贝和深拷贝:程序在运行过程中使用的变量有在栈上的变量和在堆上的变量,在对象或者变量的赋值操作过程中,大多数情况先是 ...

随机推荐

  1. 百度地图API的调用

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head ...

  2. RMAN数据库异机迁移

    本文讲述如何用rman将一个库迁移到另一个服务器上. 服务器A:linux es4 + oracle9204 (源)服务器B:linux es4 + oracle9204 (目标) 一.创建目录 为了 ...

  3. word2010中莫名出现灰色中括号解决方案

    灰色中括号[]是文中书签,解决方案: word 文件-选项-高级,在“显示文档内容”部分,去掉“显示书签”前面的勾选.

  4. jQuery修改操作css属性实现方法

    在jquery中我们要动态的修改css属性我们只要使用css()方法就可以实现了,下面我来给各位同学详细介绍介绍. css()方法在使用上具有多样性,我们先来了解css()方法基本知识. css() ...

  5. HNU OJ10320 穿越火线 简单模拟

    穿越火线 Time Limit: 10000ms, Special Time Limit:25000ms, Memory Limit:65536KB Total submit users: 12, A ...

  6. sun X509/X500Name异常(已解决)

    appium环境搭建好后,再跑第一个脚本时遇到这个问题: Errors occurred during the build.Errors running builder 'Android Packag ...

  7. Python脚本控制的WebDriver 常用操作 <二十一> 执行JS

    测试用例场景 如果你熟悉js的话,那么使用webdriver执行js就是一件很高效的事情了.在webdriver脚本中直接执行js的好处很多,这里就不一一枚举了. webdriver提供了execut ...

  8. Android的有关EditText的能多行显示但无法禁止自动换行的Bug!

    需求: 使 EditText或TextView 支持 多行显示,但是不自动换行,即能水平滚动较长的内容. Bug: 想当然的,在XML定义中设置如下,应该就可以了. android:scrollHor ...

  9. bzoj 3123 [Sdoi2013]森林(主席树,lca,启发式合并)

    Description Input 第一行包含一个正整数testcase,表示当前测试数据的测试点编号.保证1≤testcase≤20. 第二行包含三个整数N,M,T,分别表示节点数.初始边数.操作数 ...

  10. BNUOJ-26476 Doorman 贪心

    题目链接:http://www.bnuoj.com/bnuoj/problem_show.php?pid=26476 题意:给一个字符序列,比如MWMMW,每次可以取前面两个中的一个,取出来后,取出来 ...