ECMA-262 把对象定义为:无序属性的集合,其属性可以包含基本值、对象或者函数;

var Person = {
name:"wsc",
age :"25",
job :"software engineer",
sayname : function(){
alert(this.name)
}
}
var person = new Object();
person.name="wsc";
person.age = "26";
person.job = "software engineer";
person.sayname=function(){
alert(this.name);
}

ECMA-262 第5版中定义对象的两种属性:数据属性和访问属性;(为表示特性是内部值,规范将其放在两对方括号中,如[[Enumerable]])

1.数据属性:包含一个数据值的位置。在这个位置可以读取和写入值。

  4个描述行为的特性;

    (1).[[Configurable]]   // 默认为true ,作用:可以delete删除属性从而重新定义属性;支持修改属性;支持把属性改成访问属性。
    (2).[[Enumerable]]    // 默认为true,作用:可以使用for-in 循环返回属性;
    (3).[[writable]]         // 默认为true ,作用:可以修改属性值;
    (4).[[Value]]             //默认undefined 作用:包含这个属性的数据值;

  修改属性默认的特性 ,方法是Object.defineProperty(),参数(对象名,属性名,描述符对象),如;  

var person={};
Object.defineProperty(person,"name",{
writable:false,
value : "wsc"
}); alert(person.name) ;//wsc
person.name = "wscir";//在严格模式下,此操作会抛错
alert(person.name);//wsc;

  注意:a.一旦将属性定义为不可配置的,就不能再把他变回可配置。此时在调用Object.defineProperty()方法修改除writable之外的特性,都会导致错误;
        b.在调用Object.defineProperty()方法时,如果不指定,coonfigurable、enumerable、writable特性的默认值都是false;
      c.只能在DOM对象上使用此方法,而且只能创建访问器属性,不要再IE8中使用Object.defineProperty()方法;

2.访问属性:不包含数据值,它包含一对getter和setter函数(都不是必须的),读取访问属性时 调用getter函数,写入访问属性时,调用setter函数。

  4个描述行为的特性;

    (1).[[Configurable]]   // 默认为true ,作用:可以delete删除属性从而重新定义属性;支持修改属性;支持把属性改成访问属性。
    (2).[[Enumerable]]    // 默认为true,作用:可以使用for-in 循环返回属性;
    (3).[[Get]]         // 默认为undefined ,作用:读取属性时调用的函数;
    (4).[[Set]]             //默认undefined 作用:写入属性时调用的函数;

  访问属性不能直接定义 ,必须使用Object.defineProperty()来定义,如;  

var book={
  _year : 2004,
  edition : 1
};
Object.defineProperty(book,"year",{
  get:function(){
    return this._year;  
  },
  set:function(newValues){
    if(newValues > 2004){
      this._year = newValues;
      this.edition +=newValues - 2004
    }
  }
}); book.year = 2005 ;
alert(book.edition);//2; //兼容浏览器有:IE9+ Firefox4+ Safari5+ Opera12+ 和chrome,不支持Object.defineProperty()方法的浏览器中不能修改[[configuarable]]、[[Enumerable]];
var book={
  _year : 2004,
  edition : 1
};
//定义访问器旧有的方法,由Firefox引入 Safari3 Opera9 和chrome1
Object._defineGetter_("year",function(){
  return this._year;  
});
Object._defineSetter_("year",function(newValues){
  if(newValues > 2004){
    this._year = newValues;
    this.edition +=newValues - 2004
  }
});

book.year = 2005 ;
alert(book.edition);//2;

javascript 理解对象--- 属性类型的更多相关文章

  1. JavaScript--我发现,原来你是这样的JS:面向对象编程OOP[1]--(理解对象和对象属性类型)

    一.介绍 老铁们,这次是JS的面向对象的编程OOP(虽然我没有对象,心累啊,但是可以自己创建啊,哈哈). JS高程里第六章的内容,这章内容在我看来是JS中很难理解的一部分.所以分成三篇博客来逐个理清. ...

  2. JS--我发现,原来你是这样的JS:面向对象编程OOP[1]--(理解对象和对象属性类型)

    一.介绍 老铁们,这次是JS的面向对象的编程OOP(虽然我没有对象,心累啊,但是可以自己创建啊,哈哈). JS高程里第六章的内容,这章内容在我看来是JS中很难理解的一部分.所以分成三篇博客来逐个理清. ...

  3. JavaScript 面向对象的程序设计(一)之理解对象属性

    首先,JavaScript 面向对象的程序设计,主要分三部分. 理解对象属性: 理解并创建对象: 理解继承. 本文主要从第一方面来阐述: 理解对象属性 首先我们来理解Javascript对象是什么?在 ...

  4. JavaScript判断对象的类型

    JavaScript判断对象的类型 最近阅读了一些关于JavaScript判断对象类型的文章.总结下来,主要有constructor属性.typeof操作符.instanceof操作符和Object. ...

  5. JavaScript 访问对象属性和方法及区别

    这篇文章主要介绍了浅析JavaScript访问对象属性和方法及区别的相关资料,仅供参考 属性是一个变量,用来表示一个对象的特征,如颜色.大小.重量等:方法是一个函数,用来表示对象的操作,如奔跑.呼吸. ...

  6. 【java】java获取对象属性类型、属性名称、属性值

    java获取对象属性类型.属性名称.属性值 获取属性 修饰符:[在Field[]循环中使用] String modifier = Modifier.toString(fields[i].getModi ...

  7. C# 取得对象属性类型

    1.对象 Object obj; 2.对象属性 Type postType = obj.GetType(); PropertyInfo[] postTypeInfos = postType.GetPr ...

  8. JavaScript 之 对象属性的特性 和defineProperty方法

    对象是无序属性的集合,而这些属性在创建是都带有一些特征值(可以理解为属性的属性,天生自带的),这些特征值是为了实现JavaScript引擎用的,因此JavaScript不能直接访问. JavaScri ...

  9. JavaScript: 理解对象

    ECMA-262 把对象定义为:“无序属性的集合,其属性可以包含基本值.对象或者函数.” 严格来讲,这就相当于说对象是一组没有特定顺序的值.对象的每个属性或者方法都有一个名字,而每个名字都映射到一个值 ...

随机推荐

  1. Oracle中select使用别名

    1 .将字段用as转换成别名. 2 .直接在字段的名字后面跟别名. 3 .在字段后面用双引号引起的别名.   我的朋友 大鬼不动 最近访客 fhwlj kochiyas 大極星 Alz__ deser ...

  2. Linux 下8种优秀的屏幕录制机

    导读 屏幕录制机已经成为常见的和良好的实践来记录一个重要桌面会话,例如,你想玩一个难度较大的游戏,并且向记录是如何完成的,或者你打算创建一个视频教程,入门文章或指南,或任何其他活动和记录你的桌面会话, ...

  3. jqGrid设置符合条件的行选中

    1.描述:在loadComplete的时候,符合zoneCode列不为null的被选中,第一列为zoeCode2.问题:已经获取到zoneCode不为null的列,但是该行一直没有选中.3.截图:4. ...

  4. 1358 棋盘游戏[状压dp]

    1358 棋盘游戏  时间限制: 1 s  空间限制: 64000 KB  题目等级 : 大师 Master 题解  查看运行结果     题目描述 Description 这个游戏在一个有10*10 ...

  5. SPS读书笔记1——均值比较(T检验,方差检验,非参数检验汇总)

    均值比较.单样本T检验(One-sample Test))目的:检验单个变量的均值与给定的某个常数是否一致.)判断标准:p<0.05;t>1.98即认为是有显著差异的..独立样本T检验(I ...

  6. Code Force 21B Intersection

    B. Intersection time limit per test1 second memory limit per test256 megabytes inputstandard input o ...

  7. Android中的 style 和 theme

    通过设置 view 控件的属性,达到设置android UI的目的,如果某些 属性值复用率很高,可以考虑将属性单独声明在 style中,这样就可以达到复用的效果. 一.style Style 概念:A ...

  8. python学习笔记(二)— 列表(list)

    列表也叫数组,列表定义,使用[]即可:列表里面可以再套列表,一个里面套一个列表,叫二维数组:一个里面套一个列表,里面的列表再套一个列表,这个叫三维数组,套几层就是几维,定义格式如下: list1 = ...

  9. requests和bs4

    requests模块,仿造浏览器发送Http请求bs4主要对html或xml格式字符串解析成对象,使用find/find_all查找 text/attrs 爬取汽车之家 爬取汽车之家的资讯信息,它没有 ...

  10. PCI 设备详解二

    上篇文章主要从硬件的角度分析了PCI设备的特性以及各种寄存器,那么本节就结合LInux源代码分析下内核中PCI设备的各种数据结构以及相互之间的联系和工作机制 2016-10-09 注:一下代码参考LI ...