面向对象: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() // 方法