首页 > 编程语言 >JavaScript对象属性的特性高级功能

JavaScript对象属性的特性高级功能

时间:2023-02-14 15:36:34浏览次数:50  
标签:JavaScript name 对象 xxx dog 特性 person 属性


“use strict”

/创建一个对象最简单的方式:创建一个Object的实例,然后再为它添加属性和方法/

var person = new Object();

person.name = “Hongbin”;

person.age = 21;

person.job = “students”;

person.say = function () {

console.log("Hi! I am "+this.name);

};

//后来 对象字面量 成为创建这种对象的首选模式。用对象字面量语法写上述代码:

var person = {

name:“Hongbin”,

age:21,

job:“students”,

say:function () {

console.log("Hi! I am "+this.name)

}

};

//对象有数据属性,数据属性有4个描述其行为的特性(特性是内布置,按照ECMA-262规范,要把它们放入两对方括号中[[xxx]])

/*

* [[Configurable]]:能否删除属性,能否修改属性的特性,能否把属性修改为访问器属性,像上述对象的属性Configurable默认为true

*

* [[Enumerable]]:能否通过for-in循环返回属性,像上述例子默认为true

*

* [[Writable]]:表示能否修改属性的值。向上面可以直接给属性值,该属性就为true

*

* [[Value]]:包含这个属性的数据值。读取数据值的时候,从这个位置读;写入属性值时,把新值保存在这个位置,默认为undefined;例如上述name:“Hongbin”,"Hongbin"就是name属性的值就是[[Value]],没有给他值就是undefined;

*

* 要使用它们,即要修改属性默认特性必须使用ECMAScript5的Object.defineProperty()方法,该方法要传三个参数:(属性所在的对象,属性的名字,描述符对象)。描述符对象即configurable,enumerable,writable,value。可以同时设置多个特性,将第三个参数传一个{xxx:xxx,xxx:xxx}进去即可,要注意的是使用该方法后不声明configurable,enumerable,writable特性默认都为false。

* */

//举个例子:

var dog = {};//创建一个小狗对象

Object.defineProperty(dog,“name”,{

value:“xiaoxiaobin”,//设置小狗的名字为xxx

writable:false//name属性的值是只读的,不可以被修改,如果对name赋值,在非严格模式下,会被忽略,在严格模式下会抛出错误。

});

console.log(dog);

dog.name = “tiger”;

JavaScript对象属性的特性高级功能_严格模式


JavaScript对象属性的特性高级功能_描述符_02


JavaScript对象属性的特性高级功能_描述符_03

JavaScript对象属性的特性高级功能_javascript_04

<script>
//"use strict";
/*创建一个对象最简单的方式:创建一个Object的实例,然后再为它添加属性和方法*/
var person = new Object();
person.name = "Hongbin";
person.age = 21;
person.job = "students";
person.say = function () {
console.log("Hi! I am "+this.name);
};
//后来 对象字面量 成为创建这种对象的首选模式。用对象字面量语法写上述代码:
var person = {
name:"Hongbin",
age:21,
job:"students",

say:function () {
console.log("Hi! I am "+this.name)
}
};
//对象有数据属性,数据属性有4个描述其行为的特性(特性是内布置,按照ECMA-262规范,要把它们放入两对方括号中[[xxx]])
/*
* [[Configurable]]:能否删除属性,能否修改属性的特性,能否把属性修改为访问器属性,像上述对象的属性Configurable默认为true
*
* [[Enumerable]]:能否通过for-in循环返回属性,像上述例子默认为true
*
* [[Writable]]:表示能否修改属性的值。向上面可以直接给属性值,该属性就为true
*
* [[Value]]:包含这个属性的数据值。读取数据值的时候,从这个位置读;写入属性值时,把新值保存在这个位置,默认为undefined;例如上述name:"Hongbin","Hongbin"就是name属性的值就是[[Value]],没有给他值就是undefined;
*
* 要使用它们,即要修改属性默认特性必须使用ECMAScript5的Object.defineProperty()方法,该方法要传三个参数:(属性所在的对象,属性的名字,描述符对象)。描述符对象即configurable,enumerable,writable,value。可以同时设置多个特性,将第三个参数传一个{xxx:xxx,xxx:xxx}进去即可,要注意的是使用该方法后不声明configurable,enumerable,writable特性默认都为false。
* */
//举个例子:
var dog = {};//创建一个小狗对象
Object.defineProperty(dog,"name",{
value:"xiaoxiaobin",//设置小狗的名字为xxx
writable:false//name属性的值是只读的,不可以被修改,如果对name赋值,在非严格模式下,会被忽略,在严格模式下会抛出错误。
,configurable:true//设置name属性为可删除
});

// dog.name = "tiger";//无法修改,严格模式下报错
Object.defineProperty(dog,"age",{
value:2,//age:2
configurable:false//该属性不能从对象中删除,严格模式下删除抛出错误
});

// delete dog.age;
delete dog.name;
console.log(dog);

</script>

多数形况下可能没必要用到Object.defineProperty()方法提供的这些高级功能。不过作为了解还是好的,可以加深对JavaScript对象的概念理解。


标签:JavaScript,name,对象,xxx,dog,特性,person,属性
From: https://blog.51cto.com/u_15964288/6056966

相关文章

  • vue-day02——插值语法、文本指令、属性指令、事件指令、class和style、条件渲染、列
    目录昨日回顾今日内容1插值语法1.1mvvm演示1.1插值语法2文本指令3属性指令4事件指令5class和style6条件渲染7列表渲染补充:作业昨日回顾#1put,post提交的jso......
  • python读取图片相关属性
    背景:工作中用到一些基础的图片处理的任务,比如获取图片宽高、获取图片的旋转角度等等图片属性,都是比较零散的,这里简单做个记录备忘这里用到的库exifread,安装pipisntall......
  • 这些JDK8 新特性,我还是第一次听说
    文章内容整理自博学谷狂野架构师概述什么是函数式接口?简单来说就是只有一个抽象函数的接口。为了使得函数式接口的定义更加规范,java8提供了@FunctionalInterface注......
  • JavaScript 大文件上传下载解决方案
    ​ javaweb上传文件上传文件的jsp中的部分上传文件同样可以使用form表单向后端发请求,也可以使用ajax向后端发请求    1.通过form表单向后端发送请求     ......
  • 读取属性的特性
    Object.getOwnPropertyDescriptor()方法,*两个参数:属性所在的对象和要读取器描述符的属性名,*返回值是一个对象,*如果是数据属性有:configurable,enumerable,writable,value.......
  • 从混沌到规范:JavaScript模块化方案的演进史
    前言JavaScript语言诞生至今,模块规范化之路曲曲折折。社区先后出现了各种解决方案,包括AMD、CMD、CommonJS等,而后ECMA组织在JavaScript语言标准层面,增加了模块功能(因......
  • JavaScript-面向对象的理解
    Everythingisobject(万物皆对象)作为开发大家都非常熟悉的一句话。(1)对象是单个事物的抽象。在生活中大的事物圈子,比如一只猫、一本书、一个人,都可以理解为对象(objec......
  • javascript Date日期类
     四、Date日期类迁移时间:2017年5月27日18:43:02Author:Marydon(一)对日期进行格式化(日期转字符串)自定义Date日期类的format()格式化方法方式一:(非原创)//......
  • Java8新特性5-流Stream
    Stream是Java8中引入的全新API,位于java.util.stream包下,它与java.io包下的InputStream和OutputStream等输入输出流是完全不同的概念;Java8中的Stream是对数组、......
  • JavaScript 数字是什么?
    本文首发自「慕课网」,想了解更多IT干货内容,程序员圈内热闻,欢迎关注!作者|慕课网精英讲师然冬基于IEEE754标准的双精度64位二进制格式的值(-(253-1)到253-1)。——MDN......