js之oop <二> 对象属性
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原型属性f
var 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值为18
console.log(player.age); //输出 undefined
仅设置set,该属性可修改,但不可读取。
*****************************************************************************************************************
原型链的get/set
对构造器创建的对象设置get/set属性需要用到 Object.defineProperty 。
Object.defineProPerty函数可以添加对象属性,并修改现有属性的特性。
Object.definePerperty参数:
object(必):目标对象(也可为对象原型添加,还可为DOM对象)。type:ObjectName(对象名)。
propertyname(必):属性名。type:string(字符串)。
descriptor(必):属性描述器。type:Object(对象_字面量)。
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可以对对象原型属性进行修改。
js之oop <二> 对象属性的更多相关文章
- js之oop <五>对象序列化(js的JSON操作)
js对象序列化的过程,就是对象转换为JSON的过程.JSON.stringify() 将对象序列化成JSON.(接收对象,输出字符串) var obj = {x:2,y:3}; var str = J ...
- 页面循环绑定(变量污染问题),js面向对象编程(对象属性增删改查),js字符串操作,js数组操作
页面循环绑定(变量污染问题) var lis = document.querySelectorAll(".ul li") for ( var i = 0 ; i < lis. ...
- 原来JS是这样的 - 对象属性
引子 在上一篇(原来JS是这样的 (2))刚发布的时候就阅读了那篇文章的人可能会注意到那篇曾用过"JavaScript 中万物皆对象"的说法,而在随后我发现错误后立即更新改掉了这个 ...
- JS中delete删除对象属性
1.删除对象属性 function fun(){ this.name = 'mm'; } var obj = new fun(); console.log(obj.name);//mm ...
- JS delete 用法(删除对象属性及变量)
1,对象属性删除 function fun(){ this.name = 'mm'; } var obj = new fun(); console.log(obj.name);//mm delete ...
- js delete可以删除对象属性及变量
,对象属性删除 function fun(){ this.name = 'mm'; } var obj = new fun(); console.log(obj.name);//mm delete o ...
- js知识梳理2:对象属性的操作
1.属性的查询和设置 ①基本语法 这个简单,可以通过点(.)或方括号([])运算来获取属性的值,注意点运算符后的标识符不能是保留字,方括号内的表达式必须返回字符串或返回一个可以转换成字符串的值. va ...
- js精要之对象属性
// 对象的应用解除 将对象变量置为null(在写插件多大型项目是不要忘记解除对象占用) var object1 = new Object(); var object2 = object1; // 对 ...
- js之oop <四>对象管理
对象扩展管理 Object.isExtensible() 检测对象是否可扩展(一般返回true).Object.preventExtensions() 防止对象扩展. var p = {p1:&quo ...
随机推荐
- [转]JNIEnv解析
1.关于JNIEnv和JavaVM JNIEnv是一个与线程相关的变量,不同线程的JNIEnv彼此独立.JavaVM是虚拟机在JNI层的代表,在一个虚拟机进程中只有一个JavaVM,因此该进程的所有线 ...
- Task示例,多线程
class Program { static void Main(string[] args) { Run(); } public static async void Run() { var task ...
- 解决ssh登录后闲置时间过长而断开连接
++++++++++++++++++++++++++++ #!/usr/bin/env bash password_5="Uxxx7"host_5="129.x.x.1 ...
- Java微信公众号开发
微信公众平台是腾讯为了让用户申请和管理微信公众账号而推出的一个web平台.微信公众账号的种类可以分为3种,并且一旦选定不可更改.按照功能的限制从小到大依次为:订阅号.服务号.企业号.个人只能注册订阅号 ...
- Progressive Scanning (逐行扫描) vs Interlaced Scanning (隔行扫描)
source: http://sh.sina.com.cn/20041207/231443445.shtml 逐行扫描每一帧图像均是由电子束顺序地一行接着一行连续扫描而成.要得到稳定的逐行扫描图像,每 ...
- windows7打印时,显示脱机,提示“服务器打印后台处理程序服务没有运行”。
1. 问题 windows7打印时,显示脱机,提示“服务器打印后台处理程序服务没有运行”. 2. 解决方法. 将下面的文字保存为bat文件执行,其中\\192.168.40.110\Lenovo M7 ...
- 使用inherit属性值继承其父元素样式来覆盖UA自带样式。
像button.input这样的表单控件,不同的浏览器都会有自己的样式风格(UA样式).我们可以使用inherit继承其父元素样式,从而覆盖浏览器的UA样式. button, input, selec ...
- [Android Tips] 6. Parallax ViewPager
文章 http://ryanhoo.github.io/blog/2014/07/16/step-by-step-implement-parallax-animation-for-splash-scr ...
- dubbo源码分析1-reference bean创建
dubbo源码分析1-reference bean创建 dubbo源码分析2-reference bean发起服务方法调用 dubbo源码分析3-service bean的创建与发布 dubbo源码分 ...
- 20151208_使用windows2012配置weblogic节点管理器
经过实践,weblogic节点管理器的作用主要有两点: 1.可通过weblogic控制台远程控制被管server启停. 2.可以自动重启被管server的进程,并且对spring框架提供比直接启动更快 ...