对象的定义

无序属性的集合,属性可以包括基本值,对象或函数。

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基础知识整理(对象的属性)的更多相关文章

  1. JavaScript基础知识整理

    只整理基础知识中关键技术,旨在系统性的学习和备忘. 1.在 JScript 中 null 和 undefined 的主要区别是 null 的操作象数字 0,而 undefined 的操作象特殊值NaN ...

  2. JavaScript基础知识(对象、函数与对象)

    17.对象 属性:描述对象的信息  方法:描述对象的行为  封装:只关心输入和输出(不管过程如何实现) ü 对象的分类: 内置对象(原生对象): 就是JavaScript语言预定义的对象(如Strin ...

  3. JavaScript基础知识整理(2)

    15.处理图像 注意:(1)在写js文件时,尽量将函数的声明往后写,将函数调用写在前面,这样能够使代码结构很清晰. (2)一个网页中翻转器一般超过3个,所以使用for循环减少重复使用翻转器代码的次数. ...

  4. JavaScript基础知识整理(1)

    粗略理解,努力入门中 1.在html中引入外部脚本:  <script src="filename.js"></script> 2.注释:  多于一行的长注 ...

  5. JavaScript基础知识整理(1)数组

    第一:创建. 1,var arr= new Array(); //数组为空.长度为0. arr[0]="apple"; arr[1]="orange"; arr ...

  6. JavaScript基础知识----document对象

    对象属性document.title                 //设置文档标题等价于HTML的<title>标签document.bgColor               //设 ...

  7. Javascript 基础知识整理

    Javascript的作用 表单验证,减轻服务器压力 添加页面动画效果 动态更改页面内容 Ajax网络请求(异步加载数据) -它属于前端的核心,主要用来控制和重新调整DOM,通过修改DOM结构,从而达 ...

  8. javascript基础知识整理(不定时更新)

    1.js中真与假的定义: 真:true,非零数字,非空字符串,非空对象 假:false,数字零,空字符串,空对象(null),undefined 2.使用for循环对json进行循环操作 for(va ...

  9. Javascript基础知识总结一

    Javascript基础知识总结一 <!DOCTYPE html> <html> <head lang="en"> <meta chars ...

  10. Kali Linux渗透基础知识整理(二)漏洞扫描

    Kali Linux渗透基础知识整理系列文章回顾 漏洞扫描 网络流量 Nmap Hping3 Nessus whatweb DirBuster joomscan WPScan 网络流量 网络流量就是网 ...

随机推荐

  1. .NET 支付宝SDK新版 AlipayEasySDK 配置文件详细说明

    config代码: using Tea; namespace Alipay.EasySDK.Kernel { /// <summary> /// 客户端配置参数模型 /// </su ...

  2. 编写FailServlet和SuccessServlet类

    @WebServlet("/successServlet") public class SuccessServlet extends HttpServlet { protected ...

  3. 2021级《JAVA语言程序设计》上机考试试题8

    专业教师功能页: <%@ page language="java" contentType="text/html; charset=UTF-8" page ...

  4. C++练习-1 简单输入输出

    首先完整代码如下: #include <iostream> #include <string> using namespace std; int main() { int on ...

  5. 如何在Ubuntu 20.04上安装和保护phpMyAdmin

    转载csdn:cukw6666 https://blog.csdn.net/cukw6666/article/details/107985170

  6. Connect-The-Dots

    Connect-The-Dots 目录 Connect-The-Dots 1 信息收集 1.1 端口扫描 1.2 后台目录扫描 1.2.1 目录分析 2 目标服务安全检测 2.1 ftp检测 2.2 ...

  7. 基于C++的OpenGL 10 之光照贴图

    1. 引言 本文基于C++语言,描述OpenGL的光照贴图 前置知识可参考: 基于C++的OpenGL 09 之材质 - 当时明月在曾照彩云归 - 博客园 (cnblogs.com) 笔者这里不过多描 ...

  8. 这里记录一下我个人对AXI4主从模块的理解(这些理解主要来自阅读 Xilinx AXI_FULL_M_module 源码)

    先只考虑读请求: 以取指模块和内存模块为例,取指模块是发出请求的模块,因此为 Master,属于AXI4MasterModule:内存模块是响应请求的模块,因此为 Slave,属于AXI4SlaveM ...

  9. 快捷方法1:csdn如何不登录复制代码

    按F12,在console里执行下面两句代码 $("#content_views pre").css("user-select","text" ...

  10. git账号密码修改

    1.window10下的账号密码,打开控制台->账号管理->凭据管理器