VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > 网站开发 > JavaScript >
  • JavaScript教程之js权威指南学习笔记(四)对象(2)

o.z = undefined;
6
o.z !== undefined;     //false 属性存在,但值为undefined
7
delete o.z;    //删除属性
8
"z" in o;    //false,属性不存在
 
 
5、属性getter和setter
在es5中,属性值可以用一个或两个方法代替,这个两个方法是getter和setter。由getter和setter定义的属性称做“存取器属性”。
存取器属性不具有可写性。如果属性同时具有getter和setter方法,那么它是一个读/写属性,如果只有getter方法,那么它是一个只读属性,如果它只有setter方法,那么它只有一个只写属性(数据属性中有一些例外)
getter方法:无参数,返回值是属性存取表达式的值。
setter方法:一个参数,设置属性值,
语法:
 
 
 
 
1
var o = {
2
    data_prop: value,    //普通的数据属性
3
    //存取器属性
4
    get accessor_prop() { /*函数体 */ },
5
    set accessor_prop() { /*函数体 */ }
6
};
 
 
存取器属性是可以继承的,如
 
 
 
 
1
//笛卡尔点坐标对象
2
var p = {
3
x: 1.0,
4
y: 1.0,
5
get r() {
6
return Math.sqrt(this.x * this.x + this.y * this.y);    //this指代这个点的对象,即p
7
},
8
set r(newvalue) {
9
var oldvalue = Math.sqrt(this.x * this.x + this.y * this.y);
10
var ratio = newvalue / oldvalue;
11
this.x *= ratio;
12
this.y *= ratio;
13
},
14
get theta() {
15
return Math.atan2(this.y, this.x);
16
}
17
};
18
var q = Object.create(p);     //创建一个继承getter和setter的新对象
19
q.x = 2, q.y = 1;        //给q添加两个属性
20
console.log(q.r);     //可以使用继承的存取器属性
21
console.log(q.theta);
 
 
6、属性的特性
数据属性包含4个特性,分别是它的值(value)、可写性(writable)、可枚举性(enumerable)、可配置性(configurable)。存取器属性不具有值特性和可写性,它们的可写性是由setter方法存在与否决定的。因此存取器属性的4个特性是读取(get)、写入(set)、可枚举性和可配置性。
通过调用Object.getOwnPropertyDescriptor()可以获得某个对象特定属性的属性描述符(即代表4个特性)。
 
 
 
 
1
console.log(Object.getOwnPropertyDescriptor({
2
    x: 1
3
}, "x"));     //返回 {value:1, writable:true, enumerable:true, configurable:true}
4

									
5
var random = {
6
    get octet() {
7
        return Math.floor(Math.random() * 256);
8
    },
9
}
10
//查询定义的random对象的octet属性
11
console.log(Object.getOwnPropertyDescriptor(random, "octet")); 
12
//返回 {get: /*function函数*/, set:undefined, enumerable:true, configurable:true}
13

									
14
//对于继承属性和不存在的属性,返回undefined
15
console.log(Object.getOwnPropertyDescriptor({}, "x"));    //undefined
16
console.log(Object.getOwnPropertyDescriptor({}, "toString"));    //undefined
 
 
设置属性的特性,或者让新建属性具有某种特性,则需要调用Object.definePeoperty(),传入需要修改的对象、要创建或修改的属性的名称以及属性描述符对象
  
 
 
1
var o = {};     //创建一个空对象
2
//添加一个不可枚举的数据属性x,并赋值为1
3
Object.defineProperty(o, "x", {
4
    value: 1,
5
    writable: true,
6
    enumerable: false,
7
    configurable: true
8
});
9
console.log(o.x); //1