博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
js之oop <二> 对象属性
阅读量:7111 次
发布时间:2019-06-28

本文共 3120 字,大约阅读时间需要 10 分钟。

js中对象属性可以动态添加删除删除对象属性用delete关键字。

function obj(){  }    var oo = new obj();    oo.a = "a";    oo.b = "b";    oo.a; //输出a    oo.b; //输出b    delete oo.a;    oo.a; //输出undefined

在js中对象的属性以键值对的方式来体现,且(在遍历时)无序。js中属性名(也就是key)可以用点来访问(或赋值),也可以用中括号key值来访问(或赋值)(用中括号key访问对象属性时,key必须是string类型)

var a = { x:5,y:2 }; a.x; //输出5 a['x'];//输出5

对象属性的遍历,遍历对象属性常用有两种方法。

var obj = { a1:1, a2:2, a3:3, a4:4, a5:5 };for(var i=1;i<=5;i++ ){    console.log(obj['a' + i]);}//输出 1 2 3 4 5
var obj = { a:1, b:2, c:3, d:4, e:5 };for(var item in obj){    console.log(obj[item]);}//输出 1 2 3 4 5

这里需要注意,for in 遍历对象属性是无序的,有可能遍历到原型链上的属性。且使用 for in 遍历时只能使用[]读取属性,不能使用.读取。

function obj_pro(){}    //创建obj_pro构造器obj_pro.prototype.f = 55;   //创建obj_pro原型属性fvar obj = new obj_pro();    //obj_pro创建obj对象//obj对象属性循环赋值for(var i=1;i<=5;i++){    obj['a' + i] = (i+9);}//遍历obj对象属性for(var item in obj){    console.log(obj[item]);}//输出 10 11 12 13 14 55 这里遍历把原型链上的属性f遍历出来了

****************************************************************************************************************

属性的 get/set

get/set 和其他语言一样,用来封装对象属性。get设置读取,set设置写入。

var person = {    name:"Mirage",    get age(){        return age;    },    set age(val){        if(val < 0 || isNaN(val) || val > 150){            age = 18;        }else{            age = val;        }    }}person.age = -99;console.log(person.age);    //输出 18

age的值可以在set中做判断,同样也可以在get中做判断。

var person = {    name:"Mirage",    get age(){        if(age < 0 || isNaN(age) || age > 150){            return 18;        }else{            return age        }    },    set age(val){        age = val;    }}person.age = -99;console.log(person.age);   //输出 18

可以通过get/set对特定属性设置只读或不可读

var player = {    get gameYear(){        return 5;    }}player.gameYear = 59;console.log(player.gameYear);   //输出5

仅设置get返回值,该属性就不可修改(只读)。

var player = {    set age(val){        if(val < 0 || isNaN(val) || val > 150){            age = 18;        }else{            age = val;        }    }}player.age = "age";      //player.pName值为18console.log(player.age);  //输出 undefined

仅设置set,该属性可修改,但不可读取。

*****************************************************************************************************************

原型链的get/set

对构造器创建的对象设置get/set属性需要用到 Object.defineProperty

Object.defineProPerty函数可以添加对象属性,并修改现有属性的特性。
Object.definePerperty参数:
  object(必):目标对象(也可为对象原型添加,还可为DOM对象)。typeObjectName(对象名)。
  propertyname(必):属性名。typestring(字符串)。
  descriptor(必):属性描述器。typeObject(对象_字面量)。

function person(){}Object.defineProperty(person.prototype,                      "age",                      {                        get:function(){                            return age;                        },                        set:function(val){                            if(val < 0 || isNaN(val) || val > 150){                                age = 18;                            }else{                                age = val;                            }                        }                      });var p1 = new person();p1.age = 6150;console.log(p1.age);    //输出 18。

通过defineProperty可以对对象原型属性进行修改。

 

转载于:https://www.cnblogs.com/MirageFox/p/5796166.html

你可能感兴趣的文章
Oracle 11g安装GI后,运行roothas.pl脚本报错libcap.so.1找不到
查看>>
Why Hadoop2
查看>>
Git操作指南
查看>>
FORM验证简单demo
查看>>
FindWindow使用方法
查看>>
VirtualBox 扩展虚拟硬盘容量
查看>>
iBeacon怎样工作
查看>>
【BZOJ】1627: [Usaco2007 Dec]穿越泥地(bfs)
查看>>
PHP Unit资料收集
查看>>
[Bug]转:使用jquery的 uploadify,在谷歌浏览器上总会崩溃的解决方法
查看>>
细说linux挂载——mount,及其他……
查看>>
iOS开发之微信聊天页面实现
查看>>
VS2013.3 & VS2014 任务资源管理器
查看>>
SimpleDateFormat使用具体解释
查看>>
《软件测试自动化之道》读书笔记 之 SQL 存储过程测试
查看>>
Python list替换元素
查看>>
SQL Server T-SQL高级查询(转)
查看>>
微信公众平台java开发具体解释(project代码+解析)
查看>>
Could not load the Tomcat server configuration at /Servers/Tomcat v7.0 Server at localhost-config.
查看>>
【BZOJ】1044: [HAOI2008]木棍分割(二分+dp)
查看>>