属性特性get/set

摘要:
get/set访问器是属性;功能仅在内部使用,因此您无法在JavaScript中直接访问它们;数据属性——包含数据值的位置。摘要仅声明getpro(){}属性可读而不可写;只有setpro(){}属性声明为可写和不可读。如果没有声明,则可以读取和写入属性;如果两者都已声明,则根据getset定义的方法进行读取和写入;如果两者都已声明,但定义的读/写方法无法正确读写,get/set将变为无效。获取并通常返回Get。Set已设置,不需要返回;如果调用对象的内部属性约定的命名方法是_ Name;˂!

get/set访问器是属性的特性;

特性只有内部才用,因此在javaScript中不能直接访问他们;

(1)数据属性——包含一个数据值的位置。这个位置可以读入和写入值。

数据属性有描述其行为的四个特性:

[[Configurable]]:是否可配置

[[Enumerable]]:是否可枚举

 [[Writable]]:是否可读

[[Value]]: 属性值

    

(2)访问器属性属性——不包含数据值,包含一个getter和setter函数(这两个函数不是必须的)

访问器属性也有描述其行为的四个特性: 

[[Configurable]]:是否可配置

[[Enumerable]]:是否可枚举

[[Get]]:在读取属性时调用的函数,默认是undefined

[[Set]]:在写入属性时调用的函数,默认是undefined 

get/set访问器行为特点:

get/set访问器可以不用定义,不定义也可以读写属性值。也可以只定义一个。只定义get,则被描述的属性只可读,不可写。只定义set,则被描述的属性只可写,不可读。

 

总结

只声明了get pro(){}属性 可读不可写;

只声明 set pro(){}属性可写不可读。

如果都不声明,属性可读可写;

如果都声明就按照,get set 定义的方法,读写;

如果都声明了,但是定义的读写方法不能正确读写,get/set失效。变成默认的可读可写

在prototype里面定义的value属性,定义了get 特性。依然可以控制value属性的读写 。也就是说obj.value访问属性时,会调用get方法,先在对象本身寻找,如果没有,再到prototype寻找,如果都没有才算没有定义,默认的既可读又可写。

get是得到,一般是要返回的,set是设置,不用返回;

如果调用对象内部属性约定的命名方式是 _名称;

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>get/set</title>
</head>
<body>
<input id="both" type="text" placeholder="请输入你的出生年,比如1989">
<button id="btn">计算</button>
结果:<p id="text"></p>
</body>
</html>
<script>
var myV = document.getElementById("both");
var btn = document.getElementById("btn");
var age = 18;
var test = {
    get age (){
        return age;
    },
    set age (value){
        if(value > 100) age= new Date().getFullYear() - value;
        else age = value;
    }
};
console.log(test.age);//18

btn.onclick = function(){
    test.age = myV.value;
    console.log("age值:"+test.age);
    
    cart.wheels = myV.value;
    console.log("wheels值:"+cart.wheels);
}

const cart = {
        _wheels:4,
        // get wheels(){
        //     return this._wheels;
        // },
        // set wheels(value){
        //     if(value < this._wheels){
        //         throw new Error('小了');
        //     }
        //     this._wheels = value;
        // }
        get wheels (){
            return this._wheels;
        },
        set wheels (value){
            if(value > 100) this._wheels= new Date().getFullYear() - value;
            else this._wheels = value;
        }
    }
    console.log(cart);//{_wheels: 4}
    console.log(cart.wheels);//4

</script>

免责声明:文章转载自《属性特性get/set》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇JavaScript中创建自定义对象uniapp微信APP支付踩坑指南:报错errMsg: "requestPayment:fail errors"下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

web前端常见的加密算法介绍

如今,信息安全越来越受到重视,前端的各种加密变得更加重要。目前,常见的加密算法可分为三种类型的对称加密算法:AES,…不对称加密算法:RSA,…哈希算法:MD5,…对称加密算法对称加密是指使用相同密钥进行加密和解密的加密算法。如果一方的密钥被泄露,加密的信息将是不安全的。使用场景:AESAES用于本地数据加密、https通信、网络传输等:高级加密标准是最常见...

Mock 基本使用

特殊的格式,例如IP,随机数,图片,地址,需要去收集二、mock优点1、前后端分离让前端工程师独立于后端进行开发。表示需要拦截的Ajax请求类型。表示数据模板,可以是对象或字符串。表示用于生成响应数据的函数。...

C#探秘系列(十)WPF:打开文件选择器选择文件并保存

//此为点击按钮的监听事件,点击按钮弹出文件选择器privatevoidimageButton_Click(objectsender,RoutedEventArgse){vardialog=newOpenFileDialog();dialog.Filter=".jpg|*.jpg|.png|*.png|.jpeg|*.jpeg";if(dialog.Show...

聚合初始化

从当前C++标准库中提取,提供了两个容器来表示数组的概念:array表示静态数组,vector表示动态数组。这两种类型都可以使用列表初始化进行初始化。std::array={1,2,3,4,5};std::vector<int>={1,2,3,4,5};这实际上是聚合初始化。聚合初始化历史悠久,在C语言中就已经存在。intarray[5]={1,2,3,4,...

MeteoInfo-Java解析与绘图教程(一)

MeteoInfo-Java解析与绘图教程(一)已经进入开发行业很多年了,这两年一直从事气象开发行业,为此对气象绘图有了新的见解像色斑图与卫星图一直都有python去绘制,在偶然的情况下,我接触到了meteoInfo,在对其使用过程中,也可以做到用java绘制格点散点图,色斑图,等值图,卫星图,风场图所以趁这个机会我开始记录自己的探索过程,方便你我他对于绘图...

java中cookie存取值

Cookie保存值:CookieuserCookie=newCookie(“loginInfo”,loginInfo);userCookie.setMaxAge(30*24*60*60);//生存期为一个月30*24*60*60userCookie.setPath(“/”);response.addCookie(userCookie);Cookie值:Coo...