在面向对象语言中都有类的概念,通过类来创建具有属性和方法的对象。而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. mysql常用命令之-用户密码修改

    --创建用户 CREATE USER 'user1'@'localhost' IDENTIFIED BY 'pass1'; GRANT SELECT,INSERT,UPDATE,DELETE ON * ...

  2. javascript之查找数组中最小/最大的数

    实现原理:和数组的顺序查找很类似,都是逐个数据的比对. 废话不多说~ 代码如下: /* * 参数说明: * array:传入数组 ,例如:var arr = [5,7,66,78,99,103,126 ...

  3. C#------各种常见错误解决方法

    1.错误:模型生成过程中检测到一个或多个验证错误 表示实体中的数据列没有和SQLServer数据库里面的表中的数据列完全相同,比如SQLServer中有ID,Name,Post,那么实体中也应该有ID ...

  4. 20145212《Java程序程序设计》课程总结

    20145212<Java程序程序设计>课程总结 一.每周读书笔记链接汇总 第一周读书笔记 第二周读书笔记 第三周读书笔记 第四周读书笔记 第五周读书笔记 第六周读书笔记 第七周读书笔记 ...

  5. 在线考试系统(Online Exam System)--ASP.NET

    用户设计 -|学生 -|老师 -|管理员 学生结构设计 -|个人信息管理 -|修改个人信息 -|修改登录密码 -|选课中心 -|显示所有老师所开课的信息可进行选课 -|显示自己已选课程 -|在线考试 ...

  6. PHP----遇到的Session问题

    使用SESSION,当跨页面使用时,会提示错误Cannot modify header information - headers already sent by..., 背景:使用session_s ...

  7. webkit的一些不为人知的高级属性

    1.-webkit-tap-highlight-color   tap按钮或者链接时,就会出现一个半透明的灰色背景,设置属性: -webkit-tap-highlight-color:transpar ...

  8. Unity3D SceneView Camera

    http://forum.unity3d.com/threads/moving-scene-view-camera-from-editor-script.64920/

  9. JavaScript 函数参数传递到底是值传递还是引用传递

    tips:这篇文章是听了四脚猫的js课程后查的,深入的理解可以参看两篇博客: JavaScript数据类型--值类型和引用类型 JavaScript数据操作--原始值和引用值的操作本质 在传统的观念里 ...

  10. PageBase

    namespace Webform.App { public class PageBase : System.Web.UI.Page { } public interface IService< ...