对象属性

创建对象方式:

1 var person = new Object();
2 person.name = "Nicholas";
3 person.age = 29;
4 person.job = "Software Enginner";
5
6 person.sayName = function(){
7         alert(this.name);
8 };

或者

1 var person = {
2       name: "Nicholas",
3       age: 29,
4       job: "Software Engineer",
5
6       sayName: function(){
7             alert(this.name);
8       }
9 };

属性类型:

ECMAScript中有两种属性:数据属性和访问器属性

1、数据属性:(4个)

[[Configurable]]:表示能否通过delete删除属性从而重新定义属性,能否修改属性的特性,或者能否把属性修改为访问器属性。像前面例子中那样直接在对象上定义的属性,它们的这个特性默认值为true。

[[Enumerable]]:表示能否通过for-in循环返回属性。像前面例子中那样直接在对象上定义的属性,它们的这个特性默认值为true。

[[Writable]]:表示能否修改属性的值。像前面例子中那样直接在对象上定义的属性,它们的这个特性默认值为true。

[[Value]]:包含这个属性的数据值。读取属性值的时候,从这个位置读;写入数据值的时候,把新值保存在这个位置。这个特性的默认值为undefined。

要修改属性默认的特性,必须使用ECMAScript5的Object.defineProperty()方法。这个方法接收三个参数:属性所在的对象、属性的名字和一个描述符对象。其中,描述符(descriptor)对象的属性必须是:configurable、enumerable、writable和value。设置其中的一或多个值,可以修改对应的特性值。

exp:

1 var person = {};
2 Object.defineProperty(person,"name",{
3         writable:false,
4         value:"Nicholas"
5 })
6
7 alert(person.name);        //"Nicholas"
8 person.name = "Greg";
9 alert(person.name);        //"Nicholas"

writable设置为false,name属性的值不可修改。

注意:一旦把属性定义为不可配置的,就不能再把它变回可配置了。即把configurable设置为false,此时再调用Object.defineProperty()方法修改除writable之外的特性,都会导致错误。

2、访问器属性:(4个)

[[Configurable]]:表示能否通过delete删除属性从而重新定义属性,能否修改属性的特性,或者能否把属性修改为数据属性。对于直接在对象上定义的属性,这个特性的默认值为true。

[[Enumerable]]:表示能否通过for-in循环返回属性。对于直接在对象上定义的属性,这个特性的默认值为true。

[[Get]]:在读取属性时调用的函数。默认值为undefined。

[[Set]]:在写入属性时调用的函数。默认值为undefined。

访问器属性不能直接定义,必须使用Object.defineProperty()来定义。

exp:

 1 var book = {
 2     _year:2004,
 3     edition:1
 4 };
 5
 6 Object,defineProperty(book,"year",{
 7         get:function(){
 8             return this._year;
 9         },
10         set:function(newValue){
11             if(newValue > 2004){
12                     this._year = newValue;
13                     this.edition += newValue - 2004;
14             }
15         }
16 });
17
18 book.year = 2005;
19 alert(book.edition);    //2
定义多个属性:

Object.defineProperties()方法。这是方法可以通过描述符一次定义多个属性。这个方法接收两个对象参数:第一个对象是要添加和修改其属性的对象,第二个对象的属性与第一个对象中要添加或修改的属性一一对应。

exp:


var book = {};

Object.defineProperties(book,{
        _year:{
            writable:true,
            value:2004
        },

        edition:{
            writable:true,
            value:1
        },

        year:{
            get:function(){
                return this._year;
            },

            set:function(newValue){
                if(newValue > 2004){
                    this._year = newValue;
                    this.edition += newValue - 2004;
                }
            }
        }
});
 
读取属性的特性:

Obeject.getOwnPropertyDescriptor()方法,可以取得给定属性的描述符。这个方法接收两个参数:属性所在的对象和要读取其描述符的属性名称。返回值是一个对象,如果是访问器属性,这个对象的属性有configurable、enumerable、get和set;如果是数据属性,这个对象的属性有configurable、enumerable、writable和value。

exp:

 1 var book = {};
 2
 3 Object.defineProperties(book,{
 4         _year:{
 5             writable:true,
 6             value:2004
 7         },
 8
 9         edition:{
10             writable:true,
11             value:1
12         },
13
14         year:{
15             get:function(){
16                 return this._year;
17             },
18
19             set:function(newValue){
20                 if(newValue > 2004){
21                     this._year = newValue;
22                     this.edition += newValue - 2004;
23                 }
24             }
25         }
26 });
27
28 var descriptor = Object.getOwnPropertyDescriptor(book,"_year");
29 alert(descriptor.value);        //2004
30 alert(descriptor.configurable);    //false
31 alert(typeof descriptor.get);    //"undefined"
32
33 var descriptor = Object.getOwnPropertyDescriptor(book,"year");
34 alert(descriptor.value);        //undefined
35 alert(descriptor.enumerable);        //false
36 alert(typeof descriptor.get);     //"function"
时间: 2024-10-16 08:49:00

对象属性的相关文章

JavaScript原生对象属性和方法详解——Array对象 转载

length 设置或返回 数组中元素的数目. 注意:设置 length 属性可改变数组的大小.如果设置的值比其当前值小,数组将被截断,其尾部的元素将丢失.如果设置的值比它的当前值大,数组将增大,新的元素被添加到数组的尾部,它们的值为 undefined.所以length不一定代表数组的元素个数. var arr = new Array(3) arr[0] = "John" arr[1] = "Andy" arr[2] = "Wendy" cons

javascript 对象属性的添加,删除,json对象和字符串转换方法等

1:动态添加 对象属性 var obj = new Object(); console.log (obj.username); obj.username = "haha"; console.log (obj.username); //undefined //haha 用"[]"表示.写成 obj["username"] = "haha"; var obj = new Object(); console.log (obj.use

Node对象属性

1.Node对象属性一            * nodeName             * nodeType            * nodeValue * 使用dom解析html时候,需要html里面的标签,属性和文本都封装成对象 <body> <span id="spanid">哈哈呵呵</span> <script type="text/javascript"> //获取标签对象 var span1 = d

javascript中对象属性的介绍

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <script type="text/javascript"> // 对象的属性是什么类型的? string // 如果对象的属性不是字符

js 中对象--属性相关操作

查询属性: 可以用 对象.属性 来查询属性和属性方法               或者                    对象[“属性”]  来查询属性和属性方法 演示代码: 1 <script> 2 var obj ={ 3 username:"ziksang", 4 age:22, 5 addr:"北京", 6 say:function(){ 7 return "我的名字叫 "+this.username //解析this,此

JavaScript 中关于Date的内置对象属性和方法的总结

Date 属性: 1.constructor    所建立对象的函数参考 2.prototype      能够为对象加入的属性和方法 方法: 1.getDay()    返回一周中的第几天(0-6) 2.getYear()    返回年份.2000年以前为2位,2000(包含)以后为4位 3.getFullYear()     返回完整的4位年份数 4.getMonth()      返回月份数(0-11) 5.getDate()       返回日(1-31) 6.getHours()  

linq 对象属性排序

WSWSVoucher [] wswsv = new WSWSVoucher[4]; wswsv= wswsv.OrderBy(s => s.creditAmount).ToArray<WSWSVoucher>(); wswsv= wswsv.OrderByDescending(s => s.creditAmount).ToArray<WSWSVoucher>(); linq 对象属性排序,布布扣,bubuko.com

对象属性复制几种方式

对象属性复制的三种方法: 1.Apache提供的BeanUtil.copyProperties和PropertyUtil.copyProperties两种方式 BeanUtils.copyProperties("转换后的类", "要转换的类"); PropertyUtils.copyProperties("转换后的类", "要转换的类"); 口诀:后付钱(后付前:后面的复制给前面) 2.spring提供的BeanUtil.co

详解Python对象属性

在面向对象编程中,公开的数据成员可以在外部随意访问和修改,很难控制用户修改时新数据的合法性.解决这一问题的常用方法是定义私有数据成员,然后设计公开的成员方法来提供对私有数据成员的读取和修改操作,修改私有数据成员时可以对值进行合法性检查,提高了程序的健壮性,保证了数据的完整性.属性结合了公开数据成员和成员方法的优点,既可以像成员方法那样对值进行必要的检查,又可以像数据成员一样灵活的访问. Python 2.x中属性的实现有很多不如人意的地方,在Python 3.x中,属性得到了较为完整的实现,支持

JavaScript(2)——对象属性、原型与原型链

对象属性.原型与原型链 哈哈哈,我的第二篇博客哟,说的是对象属性.原型与原型链.可能这些只是某些小点串联起来的,逻辑性没有很强.所以会对文章的可读性和理解性带来一些困扰.不过,今天我又前进了那么一小步,为之后的学习又打下了那么一丢丢的基础,虽然理解的不是特别好,不过我还会理解第二次,第三次.恩.加油! [对象] 对象中包含一系列的属性.这些属性都是无序的,每个属性都有一个字符串key和对应的value. 创建自定义对象的最简单方式就是创建一个object实例,然后再为它添加属性和方法. 属性类型