JS 面向对象的程序设计思想(1)深入理解JS对象

1、js的中没有OO语言中的'类'的概念。ECMAjs中把对象定义为:‘无序属性的集合,其属性可以包含基本值,对象或函数’。

2、ECMAScript中为对象定义了一组只有内部可以使用的属性,这些属性的目的是为了描述外部定义的属性的各种特征。这些特征是为了实现JS引擎用的,

因此再JS中不能不能直接访问它们。为了表示这个特性是内部值,把他们放到了两对中括号中,例如[[Enumerable]]。

  数据属性:

    [[Configurable]]:可配置性,默认为true,描述这个数据属性是否可以被delete,从而重新定义属性、描述了能否修改属性的特性,能否把属性改为访问器属性

    [[Enumerable]]:可遍例(for-in)性,默认为true。

    [[Writable]]:可修改性。默认为true

    [[Value]]::在此保存数据。默认为undefined.

var person = {};
Object.defineProperty(person, "name", {//要修改属性的默认特性。必须使用Object.definedProperty()
writable: false;
value: 'Nicholas'
});
alert(person.writable);//Nicholas
person.name = 'wang';
alert(person.writable);//Nicholas

  

  访问器属性:(不包含数据值,包含一对getter,setter函数)

    [[Configurable]]:可配置性,默认为true,描述这个属性是否可以被delete,从而重新定义属性、描述了能否修改属性的特性,能否把属性改为访问器属性

    [[Enumerable]]:可遍例(for-in)性,默认为true。

    [[Get]]:在读取属性时调用的函数。默认值为undefined

    [[Set]]:在写入属性时调用的函数。默认值为undefined

var person={
_age = 10,
addAge = 1
};
Object.defineProperty(person, 'age',{
get: function(){
return this._age;
},
set: function(newValue){
if(newValue > 10){
_age = newValue;
addAge = newValue - 10;
}
}
});
person.age = 12;
alert(person.addAge);//2

  除了一次性修改一个属性的特性方法:Object.defineProperty();还有另一个更加强大的方法:Object.defineProperties();可以一次性修改多个属性的特性。

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.edtion += newValue - 2004;
}
}
}
});
book.year = 2005;
alert(book.edition);//2

  

javascript 高级程序设计 九的更多相关文章

  1. JavaScript高级程序设计(九):基本概念----函数

    一.参数的理解 1.ECMAScript中的参数在内部是用一个数组来表示的.函数接收到的始终是这个数组,而不关心数组中包含多少个参数,即使没有参数也可以. 2.实质上,函数可以通过arguments对 ...

  2. JavaScript高级程序设计(九):基本概念----语句的特殊点

    一.Label语句.break/continue语句和for循环语句的结合使用: 1.Label语句可以在代码中添加标签,以便将来使用.语法: label:statment   eg: start:f ...

  3. javascript高级程序设计学习笔记

    javascript高级程序设计,当枕头书已经好久了~zz  现在觉得自己在js的开发上遇到了一些瓶颈,归根究底还是基础太薄弱,所以重新刷一遍js高程希望有更新的认识. 一.javascript简介 ...

  4. 《JavaScript高级程序设计(第3版)》笔记-序

    很少看书,不喜欢看书,主要是上学时总坐不住,没有多大定性,一本书可以两天看完,随便翻翻,也可以丢在角落里几个月不去动一下. 上次碰到了<JavaScript高级程序设计(第3版)>感觉真的 ...

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

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

  6. 【javascript学习——《javascript高级程序设计》笔记】DOM操作

    DOM(文档对象模型)是针对HTML和XML文档的一个API(应用程序编程接口).DOM描绘了一个层次节点树,允许开发人员添加.移除和修改. 1.节点层次 <html> <head& ...

  7. 读javascript高级程序设计00-目录

    javascript高级编程读书笔记系列,也是本砖头书.感觉js是一种很好上手的语言,不过本书细细读来发现了很多之前不了解的细节,受益良多.<br/>本笔记是为了方便日后查阅,仅作学习交流 ...

  8. 《JavaScript高级程序设计》读书笔记--前言

    起因 web编程过程使用javascript时感觉很吃力,效率很低.根本原因在于对javascript整个知识体系不熟,看来需要找些书脑补一下,同时欢迎众网友监督. 大神推荐书籍 看了博客大神们推荐的 ...

  9. 阅读摘录《javascript 高级程序设计》01

    前言: 因为工作需要,所以开始主攻前台JS方面的技术.在以前的工作中,使用过这门脚本语言.但是都是比较凌乱的,用到什么学什么,只是为了实现业务,而去使用. 不会考虑到代码优化,封装对象等.今次特意借了 ...

随机推荐

  1. thymeleaf 的常见属性

                                              

  2. C# 计算接口调用时长

    //获取 接口的数据 Stopwatch sw = new Stopwatch();//计算耗时 sw.Start();fn1();//接口调用方法 sw.Stop();return JsonMsg. ...

  3. Python自动化运维开发实战 三、python文件类型

    导语: python常用的有3种文件类型 1. 源代码 py 2. 字节代码 pyc 3. 优化代码 pyo 源代码: python源代码的文件以”py"为扩展名,由python程序解释,不 ...

  4. ie兼容,手机端兼容问题

    兼容性: 1.ie6,7不能兼容border-radius:若需要可以用图片的方式进行模拟. 2.ie6, 7中如果兄弟元素没有给左浮动,而本身给了右浮动,将会出现塌陷(也就是掉下去):如需要可以将右 ...

  5. ggplot2

    应用与: http://www.cnblogs.com/batteryhp/p/5232353.html 由于python中matplotlib包的画图功能比较基本,不怎么炫酷,所以想用R中的ggpl ...

  6. springboot-day01-引入基础

    1. 今日大纲 1. 了解Spring的发展 2. 掌握Spring的java配置方式 3. 学习Spring Boot 4. 使用Spring Boot完成CRUD 2. Spring的发展 2.1 ...

  7. 签名Cookie

    [签名Cookie] set-cookie时加上防篡改验证码. 如: user_name=alex|bj95ef23cc6daecc475de   防篡改验证码的生成规则可以很简单:md5(cooki ...

  8. 读取excel表格以及生成自动化报告

    数据库读取 标签(空格分隔): 数据库读取 读excel数据xlrd 当登录的账号有多个的时候,我们一般用excel存放测试数据,本节课介绍,python读取excel方法,并保存为字典格式. 1.先 ...

  9. Java反射、动态加载(将java类名、方法、方法参数当做参数传递,执行方法)

    需求:将java类名.方法.方法参数当做参数传递,执行方法.可以用java的动态加载实现   反射的过程如下:     第一步:通过反射找到类并创建实例(classname为要实例化的类名,由pack ...

  10. vue confirm确认

    this.$confirm('您确定删除吗?').then(_ => { do something ... (确认) }).catch(_ => { do something ... (取 ...