zoukankan      html  css  js  c++  java
  • js篇之对象数据属性与存取器属性

    在ECMAScript中,对象属性值可以用一个或两个方法代替,这两个方法就是getter和setter。由getter与与setter定义的属性叫做‘存取器属性’。当程序查询存取器属性的值时,js调用getter方法(无参数),这个方法返回的值就是属性存取表达的值。当程序设置一个存取器属性的值时,调用的是setter方法。

    属性特性

    数据属性的四个特性:值(value)、可写性(writable)、可枚举性(enumerable)、可配置性(configurable)

    存取器属性的四个特性:读取(get)、写入(set)、可枚举性、可配置性。

    使用Object.defineProperty()先来直观的感受一下这两者的不同:

    使用Object.defineProperty()对数据属性进行设置的方法如下

    1 var obj = {};
    2 Object.defineProperty(obj, "prop", {
    3 value: 1,
    4 writable: true, //可写性
    5 enumerable: true, //可枚举性
    6 configurable: true //设置该属性是否能被删除,以及enumerable属性是否可以被修改
    7 })

    使用Object.defineProperty()对存储器属性的设置方法如下

    1 var obj = {};
    2 Object.defineProperty(obj, "prop", {
    3 get
    4 set
    5 enumerable: true, //可枚举性
    6 configurable: true //设置该属性是否能被删除,以及enumerable属性是否可以被修改
    7 })

    存储器属性与数据属性最大的不同就是增加了getter/setter,通过它们可以对属性的值进行操作,可以实现一些实用的功能。

     1 //example1
     2 function serialnum() {
     3 var n =1; 
     4 var prop = null;
     5 Object.defineProperty(this, "n", {
     6 get: function() {
     7 return n;
     8 },
     9 set: function(value) {
    10 if(value > n) n = value;
    11 else throw '请输入一个大于n的值';
    12 }
    13 })
    14 }
    15 var obj = new serialnum();
    16 obj.n = 2;
    17 //2
    18 obj.n = 0;
    19 //Uncaught 请输入一个大于n的值

    上面的例子中,使用set函数对n的取值范围进行控制。

  • 相关阅读:
    sql server 2005中的DDL触发器
    SQL中两台服务器间使用连接服务器(ZT)
    [学习摘录]读和写,关于cache和buffer
    [摘录备忘]Shell基础
    [问题解决]bash: ifconfig: command not found
    [收藏学习]openstack脚本安装经验借鉴
    [常用收藏]电脑常用的密码破解法及其备忘录
    齐唐创业日记:毕业七年从打工到创办网站(转)
    Oracle中的to_date()函数
    上海五年的奋斗历程 从月薪3500到700万(转)
  • 原文地址:https://www.cnblogs.com/raind/p/9026759.html
Copyright © 2011-2022 走看看