码迷,mamicode.com
首页 > 其他好文 > 详细

对象(三)——属性类型,get/set方法

时间:2018-07-28 13:43:30      阅读:191      评论:0      收藏:0      [点我收藏+]

标签:load   share   else   code   设置   相关   writable   nload   http   

属性类型

1. 数据类型

  • Configurable:
    true|false,表示能否通过delete将属性删除,默认为true。当把属性的Configurable设置为false后,该属性不能通过delete删除,并且也无法再将该属性的Configurable设置回true.

  • Enumerable:true|false。表示属性可否被枚举,默认true。

  • Writable:true|false。表示属性是否可写,默认true

  • Value: 属性的值

2.访问器属性

  • Configurable:
    true|false,表示能否通过delete将属性删除,默认为true。当把属性的Configurable设置为false后,该属性不能通过delete删除,并且也无法再将该属性的Configurable设置回true.

  • get:function(){} 属性被读取的时候调用

  • set:function(newValue){} 属性被写入的时候调用

  • Value: 属性的值

3.相关函数

  • Object.defineProperty
    数据属性和访问器属性可以通过Object.defineProperty进行设置
var person={name:”Leo”}
Object.defineProperty(person,”name”,{//设置数据属性
    Writable:false;//设置为false,name属性为只读的
    Configurable:false //设置为false,则name属性不能通过delete删除
});
Object.defineProperty(person,”name”,{//设置访问器属性
    Configurable:false,
    set:function(newValue){console.log(newValue),name=newValue;}
});

不可同时设置==数据属性==和==访问器属==性如:writable和set:function(){}

在调用Object.defineProperty()方法时,如果不指定,configurable,enumerable和writable特性默认值都为false。

一旦设置configurable:false,将不可再变回可配置

  • Object.defineProperties
    作用跟Object.definePropert一样,只不过Object.definePropert只能定义单个属性,而Object.defineProperies可以定义多个属性
var person={name:”Leo”,age:18} 
Object.defineProperties(person,{
    name:{
        Writable:true
    },
    age{
        set:function(newValue){console.log(newValue)}
    }
});
  • Object.getOwnPropertyDescriptor
Object.getOwnPropertyDescriptor方法。以上面的person为例来使用
var descriptor=Object.getOwnPropertyDescriptor(person,”name”);//得到object对象,包含4个特性键值
console.log(descriptor.Value);
console.log(descriptor.Writable);

技术分享图片
==注意最后一条==

get/set方法

var man = {
    weibo:‘@ydt‘,
    _age:null,
    get age(){
        if(this._age == undefined){
            return new Date().getFullYear()-1998;
        }else{
            return this._age;
        }
    },
    set age(val){
        val = +val;//尝试转为数字类型
        if(!isNaN(val)&&val>0&&val<150){
            this._age = +val;
        }else{
            throw new Error(‘Incorrect val=‘ + val);
        }
    }
}

console.log(man.age);//27
man.age = 100;
console.log(man.age);//100
man.age = ‘abc‘;//error:Incorrect val = NaN

上例中,_age和weibo为数据属性,age为访问器属性

对象(三)——属性类型,get/set方法

标签:load   share   else   code   设置   相关   writable   nload   http   

原文地址:https://www.cnblogs.com/y-dt/p/9381506.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!