JavaScript基础知识整理(对象的属性)
对象的定义
无序属性的集合,属性可以包括基本值,对象或函数。
JavaScript中有两类属性,数据属性和访问器属性。
特征值
JavaScript使用特征值来描述属性的行为,因为是为实现JavaScript引擎用的,所以不能直接访问。
数据属性有4个特性:[[Configurable]]、[[Enumerable]]、[[Writable]]和[[Value]]。
[[Configurable]]表示能否通过delete删除属性,能否修改属性的特性,能否把属性修改为访问器属性,默认为true。
[[Enumerable]]表示能否使用for-in循环返回属性,默认为true。
[[Writable]]表示能否修改属性的值,默认为true。
[[Value]]包含着属性的值,读取属性值时从这里读,写入属性值时从这里写,默认为undefined。
可以使用Object.defineProperty()来修改属性的特性,这个函数接收3个参数:属性所在对象,属性名,描述符对象。
var person = {};
Object.defineProperty(person,"name",{
writable:false,
value:"tony"
}
alert(person.name)//Tony
person.name = "sam";
alert(person.name)//Tony 因为writable设置为false所以不能修改值
访问器属性没有数据值,相对的有setter()和getter()函数,读取属性值时调用getter(),写入属性值时调用setter()。
访问器属性也有4个特性:[[Configurable]]、[[Enumerable]]、[[Get]]和[[Set]]。
[[Configurable]]表示能否通过delete删除属性,能否修改属性的特性,能否把属性修改为访问器属性,默认为true。
[[Enumerable]]表示能否使用for-in循环返回属性,默认为true。
[[Get]]读取属性时调用的函数,默认为undefined。
[[Set]]写入属性时调用的函数,默认为undefined。
访问器属性不能直接定义,必须用Object.defineProperty()定义。
var book = {
_year:2000,
edition:1
}
Object.defineProperty(book,"year",{
get:function(){
return this._year;
}
set:function(newyear){
if(newyear > 2000){
this._year = newyear;
this.edition = newyear - 2000
}
}
});
book.year = 2001;
alert(book.edition);//2
定义多个属性
当要定义多个属性时可以用Object.defineProperties(),接收两个参数,要添加属性的对象以及由想要添加属性组成的对象。
var book = {};
Object.defineProperties(book,{
_year:{
writable:true,
value:2000
},
edition:{
writable:true,
value:1
},
year:{
get:function(){
return this._year;
},
set:function(newyear){
if(newyear > 2000){
this._year = newyear;
this.edition = newyear - 2000;
}
}
}
});
读取属性的特性
想要获得属性的特性值可以用Object.getOwnPropertyDescriptor()方法,接收两个参数,属性所属的对象,属性名称,返回一个包含特性值的对象。
var descriptor = Object.getOwnPropertyDescriptor(book,"_year");
alert(descriptor.value);//"2000"
var descriptor1 = Object.getOwnPropertyDescriptor(book,"year");
alert(descriptor.value);//"undefined"
JavaScript基础知识整理(对象的属性)的更多相关文章
- JavaScript基础知识整理
只整理基础知识中关键技术,旨在系统性的学习和备忘. 1.在 JScript 中 null 和 undefined 的主要区别是 null 的操作象数字 0,而 undefined 的操作象特殊值NaN ...
- JavaScript基础知识(对象、函数与对象)
17.对象 属性:描述对象的信息 方法:描述对象的行为 封装:只关心输入和输出(不管过程如何实现) ü 对象的分类: 内置对象(原生对象): 就是JavaScript语言预定义的对象(如Strin ...
- JavaScript基础知识整理(2)
15.处理图像 注意:(1)在写js文件时,尽量将函数的声明往后写,将函数调用写在前面,这样能够使代码结构很清晰. (2)一个网页中翻转器一般超过3个,所以使用for循环减少重复使用翻转器代码的次数. ...
- JavaScript基础知识整理(1)
粗略理解,努力入门中 1.在html中引入外部脚本: <script src="filename.js"></script> 2.注释: 多于一行的长注 ...
- JavaScript基础知识整理(1)数组
第一:创建. 1,var arr= new Array(); //数组为空.长度为0. arr[0]="apple"; arr[1]="orange"; arr ...
- JavaScript基础知识----document对象
对象属性document.title //设置文档标题等价于HTML的<title>标签document.bgColor //设 ...
- Javascript 基础知识整理
Javascript的作用 表单验证,减轻服务器压力 添加页面动画效果 动态更改页面内容 Ajax网络请求(异步加载数据) -它属于前端的核心,主要用来控制和重新调整DOM,通过修改DOM结构,从而达 ...
- javascript基础知识整理(不定时更新)
1.js中真与假的定义: 真:true,非零数字,非空字符串,非空对象 假:false,数字零,空字符串,空对象(null),undefined 2.使用for循环对json进行循环操作 for(va ...
- Javascript基础知识总结一
Javascript基础知识总结一 <!DOCTYPE html> <html> <head lang="en"> <meta chars ...
- Kali Linux渗透基础知识整理(二)漏洞扫描
Kali Linux渗透基础知识整理系列文章回顾 漏洞扫描 网络流量 Nmap Hping3 Nessus whatweb DirBuster joomscan WPScan 网络流量 网络流量就是网 ...
随机推荐
- .NET 支付宝SDK新版 AlipayEasySDK 配置文件详细说明
config代码: using Tea; namespace Alipay.EasySDK.Kernel { /// <summary> /// 客户端配置参数模型 /// </su ...
- 编写FailServlet和SuccessServlet类
@WebServlet("/successServlet") public class SuccessServlet extends HttpServlet { protected ...
- 2021级《JAVA语言程序设计》上机考试试题8
专业教师功能页: <%@ page language="java" contentType="text/html; charset=UTF-8" page ...
- C++练习-1 简单输入输出
首先完整代码如下: #include <iostream> #include <string> using namespace std; int main() { int on ...
- 如何在Ubuntu 20.04上安装和保护phpMyAdmin
转载csdn:cukw6666 https://blog.csdn.net/cukw6666/article/details/107985170
- Connect-The-Dots
Connect-The-Dots 目录 Connect-The-Dots 1 信息收集 1.1 端口扫描 1.2 后台目录扫描 1.2.1 目录分析 2 目标服务安全检测 2.1 ftp检测 2.2 ...
- 基于C++的OpenGL 10 之光照贴图
1. 引言 本文基于C++语言,描述OpenGL的光照贴图 前置知识可参考: 基于C++的OpenGL 09 之材质 - 当时明月在曾照彩云归 - 博客园 (cnblogs.com) 笔者这里不过多描 ...
- 这里记录一下我个人对AXI4主从模块的理解(这些理解主要来自阅读 Xilinx AXI_FULL_M_module 源码)
先只考虑读请求: 以取指模块和内存模块为例,取指模块是发出请求的模块,因此为 Master,属于AXI4MasterModule:内存模块是响应请求的模块,因此为 Slave,属于AXI4SlaveM ...
- 快捷方法1:csdn如何不登录复制代码
按F12,在console里执行下面两句代码 $("#content_views pre").css("user-select","text" ...
- git账号密码修改
1.window10下的账号密码,打开控制台->账号管理->凭据管理器