面向对象的程序设计(1)
来源:互联网 发布:国外大数据最牛公司 编辑:程序博客网 时间:2024/05/29 15:59
面向对象的语言标志,就是他有一个类的概念,通过类可以创建多个具有相同属性的方法和对象。但是ECMAscript并没有类的概念,所以它的对象也与其他语言中的对象有所不同
ECMA把对象定义为:“无序属性的集合,其属性可以包含基本值、对象或者函数”
它基于引用类型,由引用类型创建出来。
创建对象可以通过new一个Object的实例出来,然后给他添加属性和方法
var obj=new Object(); obj.name="burning"; obj.age=29; obj.sayName=function(){ alert(this.name); } obj.sayName()//burning
第二种方法就是对象字面量
var obj={ name:"burning", age:29, sayName:function(){ alert(this.name); } } obj.sayName();//burning
在JavaScript中对象是一种基本的数据类型,在数据结构上是一种散列表,可以看作是属性的无序集合,除了原始值其他一切都是对象。可通过属性名访问这些值,而属性名可以是包含空字符在内的任意字符串。简单点说,一个对象就是一系列属性的集合,一个属性包含一个名字(key)和一个值(value)。
数据属性
ECMAscript中包含两种属性,数据属性和访问器属性,先谈谈数据属性
- [[Configurable]]:这个属性表示是否能够通过delete删除属性重新定义属性,能否修改属性的特性,或者能否把属性修改为访问器属性。默认值为true。
- [[Enumerable]]:这个属性表示是否能够通过for-in循环返回属性。默认值为true
- [[Writable]]:表示是否能够修改属性的值。默认值为true
- [[value]]:表示包含这个属性的数据值。读取数据的时候,从这个位置读;写入值的时候就是写入他的值,默认值为undefined。
若是要修改这些属性的值,需要使用到Object.defineProperty()方法,这个方法有三个参数:对象名,属性名,和描述符对象
var person={}; Object.defineProperty(person,"name",{writable:false,value:"ROTK"}); console.log(person.name);//ROTK person.name="burning" console.log(person.name);//ROTK
当我设置了writable的时候,他就无法修改person.name的值了
**第二个参数值记得要”“引起来
我们可以通过Object.defineProperties()
的方法定义多个属性
var book={} Object.defineProperties(book,{ _year:{ value:2017 }, edition:{ value:1 }, year:{ get:function(){ return this._year }, set:function(newValue){ if (newValue>2017) { this._year=newValue; this.edition+=newValue-2017; }; } } })
访问器属性
- [[configurable]]:表示是否能通过delete删除属性而重新定义属性,能否修改属性的特性,或者能否吧属性修改为数据属性。默认值为true
- [[Enumerable]]:能否通过for-in循环返回属性。默认值为true
- [[get]]:在读取属性时调用的函数。默认值为true
- [[set]]:在写入属性时调用的函数,默认值为true
访问器属性类似于数据属性,必须使用Object.defineProperty()来定义。
var book={ _year:2017,//下划线表示只能通过对象方法访问的属性值,也就是私有变量 edition:2 } Object.defineProperty(book,"year",{ get:function(){ return 0 }, set:function(newValue){ if (newValue>2017) { this._year=newValue; this.edition+=newValue-2017; } } }) book.year=2020; alert(book.edition);//5
在上面这个例子中,我修改了get属性的值,让他返回0,我们发现如果对book.year进行输出,他永远都是0,然后我修改了set属性的值,使得edition的值发生了改变。出现了即设置一个属性的值会导致其他的值发生变化。
读取属性的特性
ECMAscript5提供了Object.getOwnPropertyDescriptor()
方法来取得给定属性的描述符。这个方法接收两个参数:对象名和和要读取其描述符的属性名称
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"); console.log(descriptor.value)//2004
- 面向对象的程序设计(1)
- 面向对象的程序设计
- 面向对象的程序设计
- 面向对象的程序设计
- 面向对象的程序设计
- 面向对象的程序设计
- 面向对象的程序设计
- 面向对象的程序设计
- 面向对象的程序设计
- 面向对象的程序设计
- 面向对象的程序设计
- 面向对象的程序设计(1)
- 重温:面向对象的程序设计
- JAVA-面向对象的程序设计
- 面向对象程序设计的基本原则
- 面向对象程序设计的基本原则
- JavaScript的面向对象程序设计
- 面向对象程序设计的基本原则
- 1074. 宇宙无敌加法器(20)
- 关于android app上传文件服务端的搭建
- python装饰器
- 爬取网页的两种方法(python3)
- Java并发学习之定时任务的几种玩法
- 面向对象的程序设计(1)
- leetCode-Non-decreasing Array
- Octave 入门
- 蓝桥选拔第一场(D)
- 标准模板库 STL-2 编程题#5: 热血格斗场(Coursera 程序设计与算法 专项课程3;函数用法:lower_bound, equal_range)
- 通过DFS和BFS判断无向图是否连通
- Linux 命令每日一练:cp命令
- IEnumerator协同程序
- 常见C语言题目:选择排序,冒泡排序,函数调用,递归等重要题列