ECMAScript 中有两种属性:数据属性和访问器属性

一 属性类型

  1.数据属性。数据属性有4个描述其行为的特性

    [[Configurable]]表示能否通过delete删除属性从而重新定义属性; 能否修改属性; 能否把属性修改为访问器属性。

      [[Enumerable]] 表示是否能通过for-in循环进行枚举。

      [[Writable]] 表示能否修改属性的值

      [[value]] 包含这个属性的值。读取和写入属性值,都是从这个位置来操作

   对象字面量初始化时定义的属性,这些特性默认都是为true。

       Object.defineProperty(object, property, descriptor) //descriptor 称为描述符对象

var person = {};
Object.defineProperty(person, "name", {
writable: false, //将对象属性设置为属性值不可修改
value: "Nicholas" //初始化属性name的值。因为包含value特性,因此"name"属性是数值属性
}); alert(person.name); // Nicholas
person.name = "Greg";
alert(person.name); // Nicholas

       [[Configurable]] 特性如果设置为false,则不能使用delete删除这个属性。并且只能修改writable这个特性,其他的属性都将不能再修改。

  2.访问器属性

      访问器属性不包含数据值。属性由[[Configurable]] 和 [[Enumerable]] 组成。[[Get]] 和 [[Set]] 属性不是必须的。

      [[Get]] 和 [[Set]] 属性类似于PHP中的魔术方法。

var book = {
_year:2004,
edition:1
};
Object.defineProperty(book, "year", {//因为设置了get、set特性,因此"year"属性为访问器属性。不能再有value,writable特性
get:function(){
return this._year;
},
set:function(newValue){
if(newValue > 2004){
this._year = newValue;
this.edition += newValue -2004;
}
}
});
book.year = 2005;
alert(book.edition); //2

    只指定getter意味着属性是不能写。只指定setter意味着属性不可读。

    不支持Object.defineProperty()方法的浏览器,使用非标准方法:

      obj.__defineGetter__ 和 obj.__defineSetter__

    不支持Object.defineProperty()的浏览器不能修改[[Configurable]],[[Enumerable]] 这两个特性

二 定义多个属性

    Object.defineProperties() 定义多个属性

var book;
Object.defineProperties(book,{
_year : { value : 2004 }, //数据属性
edition : { value : 1 }, //数据属性
year : { //访问器属性
get : function(){
return this._year;
},
set: function(){
....
}
}
});

三 读取属性的特性

  Object.getOwnPropertyDescriptor(obj,attributeName)

    obj -- 属性所在的对象 、attributeName -- 要读取其描述符的属性名称。返回一个对象,根据属性的类型(数据属性、访问器属性),返回不同的4个特性的值。

  

  

javascript学习笔记 - 面向对象 理解对象的更多相关文章

  1. JavaScript:学习笔记(9)——Promise对象

    JavaScript:学习笔记(9)——Promise对象 引入Promise Primose是异步编程的一种解决方案,比传统的解决方案回调函数和事件更加合理和强大.如下面为基于回调函数的Ajax操作 ...

  2. JavaScript:学习笔记(10)——XMLHttpRequest对象

    JavaScript:学习笔记(10)——XMLHttpRequest对象 XHR对象 使用XMLHttpRequest (XHR)对象可以与服务器交互.您可以从URL获取数据,而无需让整个的页面刷新 ...

  3. Javascript学习笔记——操作浏览器对象

    Javascript学习笔记 目前尝试利用javascript去对于一个浏览器对象完成一系列的访问及修改, 浏览器是网页显示.运行的平台,常用的浏览器有IE.火狐(Firefox).谷歌(Chrome ...

  4. javascript学习笔记02--面向对象学习

    js面向对象编程 1.  javascript 是一种基于对象的编程    object-based(基于对象):遇到的所有对象都是对象2.javascript没有类class,但是有新的原型对象,习 ...

  5. JavaScript学习笔记之原型对象

    本文是学习<JavaScript高级程序设计>第六章的笔记. JS中,便于批量创建对象的三种模式: 1.工厂模式:用一个函数封装创建对象的细节,传入必要的参数,在函数内部new一个对象并返 ...

  6. JavaScript学习笔记(一)——延迟对象、跨域、模板引擎、弹出层、AJAX示例

    一.AJAX示例 AJAX全称为“Asynchronous JavaScript And XML”(异步JavaScript和XML) 是指一种创建交互式网页应用的开发技术.改善用户体验,实现无刷新效 ...

  7. JavaScript学习笔记-面向对象的模块化编程

    面向对象的模块化编程 模块是一个独立的JS文件,模块文件可以包含一个类定义.一组相关的类.一个实用函数库.一些待执行的代码 模块化的目标:支持大规模的程序开发,处理分散源代码的组装,并能让代码正确执行 ...

  8. 1.4(JavaScript学习笔记) window对象的属性及方法

    一.window对象 window对象代表当前窗口,所有全局对象都是windows的属性, 例如document是window的属性,window.document.writer("&quo ...

  9. JavaScript学习笔记之BOM对象

    目录 1.Window 2.Window Screen 3.Window Location 4.Window History 5.Window Navigator 浏览器对象模型(Browser Ob ...

随机推荐

  1. Yii2.0数据库缓存依赖发布的使用理解

    对于产品中经常需要生成一些缓存类的东西,比如系统基础配置,商品分类等,每次修改调整后都要手动进行缓存发布,是不是非常麻烦!这时候Yii2.0的缓存依赖发布就起到至关重要的作用了!现将主要的使用流程介绍 ...

  2. 系统有问题基本出在数据库上,web层无状态

    系统有问题基本出在数据库上,web层无状态.

  3. Python+selenium之截图图片并保存截取的图片

    本文转载:http://blog.csdn.net/u011541946/article/details/70141488 http://www.cnblogs.com/timsheng/archiv ...

  4. MovieReview—Black Panther(黑豹)

    Justice & Evil   The night before the night, i saw the latest movie in the Marvel series at JiaH ...

  5. cv2.Laplacian 模糊判断

    简介   cv2.Laplacian是用来判断图像模糊度的     函数原型 dst = cv2.Laplacian(src, ddepth[, dst[, ksize[, scale[, delta ...

  6. Android深度探索总结

    Android深度探索前四章总结 通过这几章的学习真实体会到“移植”的概念:为特定设备定制Android的过程,但是移植的过程中开发最多的就是支持各种硬件设备的Linux驱动程序,本章对Android ...

  7. C/C++字符串笔试知识点及实例

    一.C字符串与C++字符串的深入理解 对于C语言,需要区分C字符串和C字符数组.  C字符串:以字符NULL('\0')结尾的字符数组:  C字符数组:数组元素类型为字符类型. C字符串的的初始化:c ...

  8. NOIP模拟赛 密室逃脱

    密室逃脱(maze.*) 即使czhou没有派出最强篮球阵容,机房篮球队还是暴虐了校篮球队.为了不打击校篮球队信心,czhou决定改变训练后的活动.近来,江大掌门的徒弟徒孙们纷纷事业有成,回到母校为机 ...

  9. java/jsp执行sql语句的方式

    首先给出sql驱动包 引入sql包 import java.sql.*;//java <%@ page import="java.sql.*"%>//jsp 连接mys ...

  10. 拼接Python字符串最常见的六种方式

    最常见的六种方式拼接Python字符串 字符串是所有编程语言中都有的基本变量的类型,程序员基本每天都在和字符串打交道. 每种字符串拼接方式的使用场景各不相同,我们可以在开发过程中灵活运用. 一.用逗号 ...