9.3 操作属性

2024-04-21 14:48
文章标签 操作 属性 9.3

本文主要是介绍9.3 操作属性,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、定义属性

  • 属性包含名和值。属性名可以是包含空字符串在内的任意字符串,属性值可以是任意JavaScript值。但对象中同一级别作用域不能存在两个同名的属性。
  • 除了名和值,每个属性还有一些相关的值,称为属性特性
    可写(writable attribute):表明是否可以设置该属性的值;
    可枚举(enumerable attribute):表明是否可以通过for/in循环返回该属性;
    可配置(configurable attribute):表明是否可以删除或者修改该属性;
  • 可以用冒号定义属性,冒号左侧是属性名,右侧是属性值;属性与属性之间用逗号运算符分隔;

1.定义属性的方式

  • 在对象结构体内定义属性
  • 使用点运算符在结构体外定义属性
var o={};
o.x=1;
o.y={
x:2,
y:true}//声明变量可以使用var语句,但是在声明对象属性时不能使用var语句
  • 使用构造函数定义属性
var o=function(){
this.x=1;
this.y={
x:1,
y:true}}
  • 两个静态函数(Object.defineProperty、Object.defineProperties),为指定对象定义属性。
    Object.defineProperty
    作用:添加新属性到对象,或者修改现有属性的特性
Object.defineProperty(object,propertyname,descriptor)
//参数说明:object,必须参数,指定要添加或者修改属性的对象;
//propertyname,必须参数,属性名称的字符串;
//descriptor,必须参数,定义属性的描述符,针对数据属性(value,writable,enumerable,configurable)或者访问器属性(set,get)
//Object.defineProperty返回值为修改后的对象
//将数据属性添加到对象中var obj={};Object.defineProperty(obj,"newOwnProperty",{value:101,writable:true,enumerable:true,configurable:true});obj.newOwnProperty=102;document.write(obj.newOwnProperty);
//将访问器属性添加到对象中var obj={};Object.defineProperty(obj,"newAccessProperty",{set:function(x){this.newavalue=x*x;},get:function(){return "<h1>"+this.newavalue+"</h1>"},enumerable:true,configurable:true});obj.newAccessProperty=30;document.write(obj.newAccessProperty);

Object.defineProperties
作用:向对象添加多个属性或者修改多个现有属性

Object.defineProperties(object,descriptors);
//参数说明:object,指定的对象;
//descriptors,必须参数,包含一个或者多个描述符对象,每个描述符对象描述一个数据属性或者访问器属性
        var obj={};Object.defineProperties(obj,{newDataProperty:{value:101,writable:true,enumerable:true,configurable:true},newAccessProperty:{set:function(x){this.a=x+2;},get:function(){return this.a;},enumerable:true,configurable:true}});obj.newAccessProperty=100;document.write(obj.newAccessProperty);

二、访问属性

1.通过点运算符访问属性。

  • 点运算符左侧是对象引用的变量,右侧是属性名(属性名是一个标识符,而不是一个字符串)
  • 对象属性与变量的工作方式相同,可以把属性看作对象的私有变量,用来存储数据

2.通过中括号访问属性

  • 以数组形式读取对象属性值时,应以字符串形式指定属性名,而不能使用标识符
var o={
x:1,
y:{
x:2,
y:{
x:3,
y:false}
}};
alert(o["y"]["y"]["y"]);

3.使用for/in语句遍历对象属性

var o={x:1,y:2,z:3
};
for(var i in o){alert(o[i])
}//使用for/in遍历对象属性时,应该使用数组操作方式来读取对象属性的值

4.ECMAScript 5 的4个访问对象属性的函数
Object.getPrototypeOf

  • 返回值是object的原型对象

Object.getOwnPropertyNames

  • 返回指定对象私有属性的名称
  • 返回值是一个数组
  • 包含可枚举和不可枚举的属性和方法的名称
  • 私有属性指的是直接对该对象定义的属性,而不是从对象的原型继承的属性

Object.keys

  • 与Object.getOwnPropertyNames类似,但是返回的是可枚举的属性和方法的名称
  • 返回值是一个数组

Object.getOwnPropertyDescriptor

Object.getOwnPropertyDescriptor(object,propertyname)
  • 返回值为属性的描述符
var obj={};
obj.newDataProperty="abc";
var desc1=Object.getOwnPropertyDescriptor(obj,"newDataProperty");
desc1.writable=false;
Object.defineProperty(obj,"newDataProperty",desc1);
var desc2=Object.getOwnPropertyDescriptor(obj,"newDataProperty");
for(var prop in desc2){document.write(prop+":"+desc2[prop]);document.write("<br/>")
}

三、赋值属性

  • 可以用点运算符和中括号运算符赋值属性
var o={x:1,y:2
}
o.x=3;
o["y"]=4;//数组操作法中括号中是字符串,而不是标识符
alert(o["x"]);
alert(o.y);

四、删除属性

  • 使用delete运算符删除属性
  • 从对象中彻底清除,而不是设置为undefined

五、对象的方法

  • 方法是一种特殊形式的属性,即值为函数的对象属性
  • 方法是对象执行特定行为的逻辑块,是与外界实现行为交互的动作
  • 使用小括号可以调用对象的方法
  • 对象方法内部的this指向调用方法的当前对象
  • 对象方法与普通函数用法完全相同,可以在方法中传递参数,可以设计返回值
var o={};
o.x=function(a){return 10*a;
}
var f=o.x(5);
alert(f);

六、配置特性

  • Object.preventExtensions(object)
    阻止对象添加新属性
  • Object.seal(object)
    阻止对象添加新属性,阻止修改特性
  • Object.freeze(object)
    组织对象添加新属性,阻止修改特性,阻止修改属性值
var obj={name:"haha",length:4};
Object.preventExtensions(obj);
obj.newprop=50;
obj.name=50;
document.write(obj.newprop);//返回undefined
document.write(obj.name);//返回50

七、检测特性

  • Object.isExtensible(object)
    如果对象是可拓展的,即可向对象添加新属性,则为true;否则为false
  • Object.isSealed(object)
    如果无法在对象中修改现有属性的特性,且无法添加新属性,则为true
  • Object.isFrozen(object)
    如果无法修改对象现有属性的特性和值,且无法添加新属性,则为true
var obj={pasta:"spaghetti",length:10};
if(!Object.isFrozen(obj)){obj.pasta=50;
}
Object.freeze(obj);
document.write(obj.pasta);

这篇关于9.3 操作属性的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/923340

相关文章

Git可视化管理工具(SourceTree)使用操作大全经典

《Git可视化管理工具(SourceTree)使用操作大全经典》本文详细介绍了SourceTree作为Git可视化管理工具的常用操作,包括连接远程仓库、添加SSH密钥、克隆仓库、设置默认项目目录、代码... 目录前言:连接Gitee or github,获取代码:在SourceTree中添加SSH密钥:Cl

使用Java将各种数据写入Excel表格的操作示例

《使用Java将各种数据写入Excel表格的操作示例》在数据处理与管理领域,Excel凭借其强大的功能和广泛的应用,成为了数据存储与展示的重要工具,在Java开发过程中,常常需要将不同类型的数据,本文... 目录前言安装免费Java库1. 写入文本、或数值到 Excel单元格2. 写入数组到 Excel表格

Python中pywin32 常用窗口操作的实现

《Python中pywin32常用窗口操作的实现》本文主要介绍了Python中pywin32常用窗口操作的实现,pywin32主要的作用是供Python开发者快速调用WindowsAPI的一个... 目录获取窗口句柄获取最前端窗口句柄获取指定坐标处的窗口根据窗口的完整标题匹配获取句柄根据窗口的类别匹配获取句

Python位移操作和位运算的实现示例

《Python位移操作和位运算的实现示例》本文主要介绍了Python位移操作和位运算的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录1. 位移操作1.1 左移操作 (<<)1.2 右移操作 (>>)注意事项:2. 位运算2.1

Python ZIP文件操作技巧详解

《PythonZIP文件操作技巧详解》在数据处理和系统开发中,ZIP文件操作是开发者必须掌握的核心技能,Python标准库提供的zipfile模块以简洁的API和跨平台特性,成为处理ZIP文件的首选... 目录一、ZIP文件操作基础三板斧1.1 创建压缩包1.2 解压操作1.3 文件遍历与信息获取二、进阶技

Java中字符串转时间与时间转字符串的操作详解

《Java中字符串转时间与时间转字符串的操作详解》Java的java.time包提供了强大的日期和时间处理功能,通过DateTimeFormatter可以轻松地在日期时间对象和字符串之间进行转换,下面... 目录一、字符串转时间(一)使用预定义格式(二)自定义格式二、时间转字符串(一)使用预定义格式(二)自

Java字符串操作技巧之语法、示例与应用场景分析

《Java字符串操作技巧之语法、示例与应用场景分析》在Java算法题和日常开发中,字符串处理是必备的核心技能,本文全面梳理Java中字符串的常用操作语法,结合代码示例、应用场景和避坑指南,可快速掌握字... 目录引言1. 基础操作1.1 创建字符串1.2 获取长度1.3 访问字符2. 字符串处理2.1 子字

Python 中的 with open文件操作的最佳实践

《Python中的withopen文件操作的最佳实践》在Python中,withopen()提供了一个简洁而安全的方式来处理文件操作,它不仅能确保文件在操作完成后自动关闭,还能处理文件操作中的异... 目录什么是 with open()?为什么使用 with open()?使用 with open() 进行

Linux ls命令操作详解

《Linuxls命令操作详解》通过ls命令,我们可以查看指定目录下的文件和子目录,并结合不同的选项获取详细的文件信息,如权限、大小、修改时间等,:本文主要介绍Linuxls命令详解,需要的朋友可... 目录1. 命令简介2. 命令的基本语法和用法2.1 语法格式2.2 使用示例2.2.1 列出当前目录下的文

Spring Security基于数据库的ABAC属性权限模型实战开发教程

《SpringSecurity基于数据库的ABAC属性权限模型实战开发教程》:本文主要介绍SpringSecurity基于数据库的ABAC属性权限模型实战开发教程,本文给大家介绍的非常详细,对大... 目录1. 前言2. 权限决策依据RBACABAC综合对比3. 数据库表结构说明4. 实战开始5. MyBA