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

  

最新文章

  1. 注解的方式搭建springmvc步骤
  2. iOS-APP发布应注意要点
  3. 二叉树的基本操作(C)
  4. java类的访问控制符与其他几个特殊修饰符的总结
  5. UVa1606 UVaLive3259 FZU1309 HDU1661 POJ2280 ZOJ2390 Amphiphilic Carbon Molecules
  6. c - static 变量
  7. (转)命令行下,用 xcodebuild 生成ipa文件,通过 itms-services 协议安装
  8. JavaWeb学习篇之----HTTP协议详解
  9. Bluetooth Obex
  10. Matlab 编译EXE
  11. spring AOP的概念和使用
  12. Python——Socket编程
  13. 网站模仿——LOFTER个人主页
  14. W10笔记本电脑弄成WIFI
  15. RabbitMQ简单应用の消息持久化
  16. Java基础巩固——《Java核心技术基础·卷一:基础知识》
  17. Aspose.Cells API 中文版文档 下载
  18. Oracle初始化参数之memory_target
  19. 无插件,无com组件,利用EXCEL、WORD模板做数据导出(一)
  20. 黑客编程教程(二)Win API编程简介

热门文章

  1. gdufe1534-小小怪一定认真听课-dfs
  2. javascript中scrollTop和offsetTop的区别
  3. AJAX简单实例
  4. asp.net mvc areas
  5. 根据23423条件,截取字段‘abdecsdsadsadsad’,以ab/dec/sdsa/ds/ads 输出
  6. awk——getline
  7. 二分图 最小点覆盖 poj 3041
  8. Zabbix 3.0编译安装
  9. 98. Validate Binary Search Tree (Tree; DFS)
  10. Codeforces Beta Round #52 (Div. 2)