javascript中的面向对象—— 学习1

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

  

 

posted on 2016-12-14 22:12  _Mr_朱  阅读(136)  评论(0编辑  收藏  举报

导航