为回馈粉丝们的热情,给各位总结一份超详细地面向对象教程:
前言:
1.创建自定义对象最简单的案例
var person = new Object();
person.name = "lily";
person.age = 16;
person.job = "Software Engineer";
person.sayName = function(){
alert(this.name);
};
2.字面量形式:
var person = {
name:"lily",
age:16,
job:"Software Engineer",
sayName:function(){
alert(this.name);
}
};
一、属性类型
ECMAScript中有两种属性:数据属性和访问器属性。 1.数据属性 (1)Configurable:能够通过detele删除属性从而重新定义属性,能否修改属性的特性,或者能否把属性修改为访问器属性,默认值true。 (2)Enumerable:能否通过for-in循环返回属性,默认值true。 (3)Writable:能否修改属性的值,默认值true。 (4)Value:读取属性值,写入属性值的时候,把新值保存在这个位置,默认值undefined。
//Object.defineProperty()方法只能修改writable特性
var person = {};
Object.defineProperty(person,"name",{
writable:false,//设置了只读
value:"lily"
});
alert(person.name);//lily
person.name = "john";
alert(person.name);//lily
2.访问器属性 包含getter和setter函数,有4个特性: (1)Configurable:能够通过detele删除属性从而重新定义属性,能否修改属性的特性,能否把属性修改为数据属性,默认值true。 (2)Enumerable:能否通过for-in循环返回属性,默认值true。 (3)Get:读取属性时调用的函数,默认值:undefined。 (4)Set:写入属性时调用的函数,默认值undefined。
var book = {
_year:2004,
edition:1
};
Object.defineProperty(book,"year",{
get:function(){
return this._year;
//_是一种常用的记号,表示只能通过对象方法访问的属性
},
set:function(newValue){
if(newValue > 2004){
this._year = newValue;
this.edition += newValue - 2004;
}
}
});
book.year = 2005;
alert(book.edition);//2
二、定义多个属性 对象定义多个属性的可能性很大。定义了一个Object.defineProperties()方法,可以一次定义多个属性。
var book = {};
Object.defineProperties(book,{
//2个数据属性
_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;
}
}
}
});
三、读取属性的特性
使用Object.getOwnPropertyDescriptor()方法,可以取得给定属性的描述符。 接收2个参数:(1)属性所在的对象。(2)要读取其描述符的属性名称。 返回值是一个对象。
var book = {};
Object.defineProperties(book,{
_year:{
value:2004,
},
edition:{
value:1
},
year:{
get:function(){
return this._year;
},
set:function(newValue){
if(newValue > 2004){
this._year = newValue;
this.edition += newValue - 2004;
}
}
}
});
var descriptor = Object.getOwnPropertyDescriptor(book,"_year");
alert(descriptor.value);//2004
alert(descriptor.configurable);//false
alert(typeof descriptor.get);//"undefined"
var descriptor = Object.getOwnPropertyDescriptor(book,"year");
alert(descriptor.value);//undefined
alert(descriptor.enumerable);//false
alert(typeof descriptor.get);//"function"
对于数据属性_year,value等于最初的值,configurable是false,而get等于undefined。对于访问器属性year,value等于undefined,enumerable是false,而get是一个指向getter函数的指针。 今天先整理到这里,稍后再续创建的7种模式~ 晚安,各位
|