面向对象:Object Oriented(OO)
一切事物皆对象,通过面向对象的方式,将显示世界的事物抽象成对象,将显示世界中的关系抽象成类、继承,帮助人们实现对显示世界的抽象与数字建模;——百科
一、基础知识点:
1、面对对象的语言都有一个标志就是都有类的概念,可以通过类创建多个具有相同属性和方法的对象;
2、ECMA-262中没有类的概念
3、ECMA-262中定义为:“无序属性的集合,其属性可以包含基本的属性值、对象或者函数”
4、理解对象:创建对象
//创建对象最简单的方式就是创建一个Object对象,再对其添加属性和方法(早期使用此方法)
var person = new Object()
person.name="Nicholas";
person.age= 56;
person.job="Software Engineer";
person.SayHai=function (){
alert(person.name)
} //以对象字面量的形式创建对象(达到的目的是一样的)
var person={
name="Nicholas";
age=34;
job="Software Engineer";
SayHai:function{
alert(person.name);
}
Ask:function{
alert("Hello World");
}
}//注意此方法中是如何创建对象方法的
二、属性类型
1、数据属性
//默认都为true
[[Configurable]]//表示能否通过delete删除属性从而重新定义属性、能否修改属性特性、或能否把属性改为访问器属性
[[Enumerable]]//能否通过for-in循环返回属性
[[Writable]] //能否修改属性的值
[[Value]] //包含这个属性的数据值
要修改属性默认的特性,必须用ECMAScript5的Object.defineProperty()方法
var person ={}
Object.defineProperty(person,"name",{
Writable:false,
Value:"Nicholas"
});
注:以上writable:false; 就是配置name属性不可修改 在严格模式下修改回报错
var person={}
Object.defineProperty(person,"name",{
Configurable:false,
Value:"Nicholas";
});
delete person.name;
alert(person.name);//Nicholas
注:以上Configurable:false; 所以delete删除 person.name在非严格模式下不起作用,在严格模式下回报错;
☆☆☆☆☆ 可以多次Object.defineProperty()方法修改同一个属性,但在configurable特性设置了false之后在调用、修改就会有限制了(报错)
2、访问器属性
三、定义多个属性
//定义多个属性 var book={};
Object.defineProperties(book,{
_year:{
Writable:true,
Value:2004
}, edition:{
Writable:true,
Value:1
}, year:{
get:function(){
return this._year;
}, set:function(){
if(newValue > 2004){
this._yeay=newValue;
this.edition+=newValue - 2004
}
}
}
});
四、读取属性的特性;
Object.getOwnPropertyDescriptor() // 方法