在面向对象语言中都有类的概念,通过类来创建具有属性和方法的对象。而ECMAScript中没有类的概念,ECMAScript中定义了对象:无需属性的集合,其属性值可以包含基本值、对象、或者函数。

在Javascript中每个对象都是基础引用类型来创建的,可以是原生类型也可以是自定义的类型。

自定义对象最简单的方法就是通过创建Object类型的实例,然后为这个实例添加属性和方法。

var Person = new Object();

Person.name = "yangxunwu";

Person.age = 24;

Person.sayName = function(){

alert(this.name);

};

我们这里创建了一个object类型的一个名为Person的对象,有两个属性name和age,一个方法sayName;

属性类型:

对象拥有属性,这些属性也有一些特性,比如Configurable、Enumerable、Writable、Value。在javascript不能直接访问这些特性,需通过对象的方法访问,比如Object.defineProperty()

数据属性:数据属性包含这个数据值的位置,在这个位置可以读取和写入值。数据属性有四个特性:

Configurable:能否通过delete删除属性从而重新定义属性,能否修改属性的特性,能否把属性修改为访问器属性。

Enumerable:能否通过for-in循环返回属性。

Writable:能否修改属性值。

Value:保持这个属性的数据值。

var Person = {

name: "yangxunwu",

}

Object.defineProperty(Person, "age", {

writable: false,

value: 24

})

定义一个Person对象,并设置一个不可写的值为24的age属性。注意定义属性时的属性字符串形式。当把属性的configurable特性设置为false时,无法在次修改,只能使用writable。

访问器属性:    访问器属性不包含值,包含一对getter和setter函数,访问访问器属性时调用getter函数,这个函数返回有效的值,写入访问器属性时调用setter函数,并传入新值。访问器属性包含四个特性:

Configurable:能否通过delete删除属性从而重新定义属性,能否修改属性的特性,能否把属性修改为数据属性。

Enumerable:能否通过for-in循环返回属性。

Get:读取数据时调用的函数。默认undefined

Set:写入属性时调用的函数。默认undefined

var Person = {

_year : 1992,

}

Object.defineProperty(Person, "year", {

get: function(){

return this._year;

},

set: function(newValue){

if(newValue > 1992){

this._year = newValue;

this.age = newValue - 1992;

}

}

})

给Person对象,定义了一个访问器属性year,访问时返回对象的__year属性,赋值时会调用set函数,然后同时设置age的值。

部分浏览器也可以通过_defineGetter__和 __defineSetter__来设置访问器特性。也可以设置多个特性Object.defineProperties()。要读取一个属性的特性,可以通过给定属性的描述符。

Object.getOwnPropertyDescriptor()方法,返回一个对象,包含各种特性的属性,可以针对BOM和DOM对象来使用。

ECMAScript定义这些特性的目的是为了实现Javascript引擎用的

Javascript高级程序设计——面向对象之理解对象的更多相关文章

  1. JavaScript高级程序设计学习(五)之对象

    众说周知,java是面向对象的编程语言.一个类包含多个对象,例如车类,它包含宝马,奔驰,东风,本田,莲花等这样的车,而品牌和颜色或者某种标识就是它的属性.车包含很多种类,但是共性还是有的,比如共性有四 ...

  2. Javascript高级程序设计——面向对象小结

    ECMAScript支持面向对象编程,对象可以在代码执行时创建,具有动态扩展性而非严格意义上的实体. 创建对象方法: 工厂模式:简单的函数创建引用类型 构造函数模式:可以创建自定义引用类型,可以想创建 ...

  3. 2020/06/06 JavaScript高级程序设计 面向对象的程序设计

    ECMAScript虽然是一种面向对象的语言,但是他没有类的概念.所以他的对象也与其他语言中的对象有所不同. ECMA-262定义对象:一组没有特定顺序的值. 6.1 理解对象 创建对象的方法: 1. ...

  4. Javascript高级程序设计——面向对象之实现继承

    原型链: 构造函数中都有一个prototype属性指针,这个指针指向原型对象,而创建的实例也有指向这个原型对象的指针__proto__.当实例查找方法时先在实例上找,找不到再通过__proto__到原 ...

  5. Javascript高级程序设计——面向对象之创建对象

    对象创建方法: 工厂方法 构造函数模式 原型模式 组合构造函数和原型模式 寄生构造函数模式 问题构造函数模式 工厂模式: function Person(name, age){ var obj = n ...

  6. 《JavaScript高级程序设计》学习笔记(5)——面向对象编程

    欢迎关注本人的微信公众号"前端小填填",专注前端技术的基础和项目开发的学习. 本节内容对应<JavaScript高级程序设计>的第六章内容. 1.面向对象(Object ...

  7. 《Javascript高级程序设计》读书笔记之对象创建

    <javascript高级程序设计>读过有两遍了,有些重要内容总是会忘记,写一下读书笔记备忘 创建对象 工厂模式 工厂模式优点:有了封装的概念,解决了创建多个相似对象的问题 缺点:没有解决 ...

  8. 读书时间《JavaScript高级程序设计》二:面向对象

    接着上次的进度,开始看第6章. 第6章 面向对象的程序设计 理解对象 创建自定义对象最简单的方式就是创建一个 Object 的实例,然后为它添加属性和方法. var person = new Obje ...

  9. 《JavaScript高级程序设计(第3版)》阅读总结记录第一章之JavaScript简介

    前言: 为什么会想到把<JavaScript 高级程序设计(第 3 版)>总结记录呢,之前写过一篇博客,研究的轮播效果,后来又去看了<JavaScript 高级程序设计(第3版)&g ...

随机推荐

  1. Android系统手机端抓包方法

    抓包准备 1. Android手机需要先获得root权限.一种是否获得root权限的检验方法:安装并打开终端模拟器(可通过安卓市场等渠道获得).在终端模拟器界面输入su并回车,若报错则说明未root, ...

  2. centos忘记root密码,重新设置的方法

    今天重新装了一个centos6.6,好像root密码没有叫我设置吧,然后用虚拟机开始安装之前的密码登录显示失败,所以有了下面的彩蛋.....Helloween... 在虚拟机安装了Centos,今天要 ...

  3. ecshop 批量生成订单信息

    <?php /** * ecshop 给商品添加随机添加订单信息 * @author Abner * qq :346882795 * email: Abner3721@163.com * * * ...

  4. 手写控件,frame,center和bounds属性

    一.手写控件 1.手写控件的步骤 (1)使用相应的控件类创建控件对象 (2)设置该控件的各种属性 (3)添加控件到视图中 (4)如果是button等控件,还需考虑控件的单击事件等 (5)注意:View ...

  5. Ubuntu下apt-get命令详解

    在Ubuntu下,apt-get近乎是最常用的shell命令之一了,因为他是Ubuntu通过新立得安装软件的常用工具命令. 本文列举了常用的APT命令参数: apt-cache search pack ...

  6. 第二次冲刺-Runner站立会议01

    今天做了什么:主要看了gridview的使用方法 遇到的困难:与适配器的链接不会 明天准备做什么:尽量将gridview与baseadapter适配器连接起来

  7. Runner站立会议01

    开会时间:9.10-9.30 地点:二教 今天做了什么:学了文本输入,button按钮,界面转换(意图) 遇到什么困难:界面转换时,出现问题,没有正常跳转 明天打所作什么:解决今天遇到的问题,学了第二 ...

  8. Java数据结构——双端链表

    //================================================= // File Name : FirstLastList_demo //------------ ...

  9. Java Native Interface Specification

    http://docs.oracle.com/javase/6/docs/technotes/guides/jni/spec/jniTOC.html http://www.ibm.com/develo ...

  10. IOS: 模型面数控制

    你可以先试试 生成之后在虚拟机上运行一下就知道了 不过关键也看手机的好坏 場景 人物 面數的話越少越好(但要保持模型的完整)  貼圖解析度也不要太大 資料越少越好 //================ ...