javascript 理解对象--- 属性类型
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 理解对象--- 属性类型的更多相关文章
- JavaScript--我发现,原来你是这样的JS:面向对象编程OOP[1]--(理解对象和对象属性类型)
一.介绍 老铁们,这次是JS的面向对象的编程OOP(虽然我没有对象,心累啊,但是可以自己创建啊,哈哈). JS高程里第六章的内容,这章内容在我看来是JS中很难理解的一部分.所以分成三篇博客来逐个理清. ...
- JS--我发现,原来你是这样的JS:面向对象编程OOP[1]--(理解对象和对象属性类型)
一.介绍 老铁们,这次是JS的面向对象的编程OOP(虽然我没有对象,心累啊,但是可以自己创建啊,哈哈). JS高程里第六章的内容,这章内容在我看来是JS中很难理解的一部分.所以分成三篇博客来逐个理清. ...
- JavaScript 面向对象的程序设计(一)之理解对象属性
首先,JavaScript 面向对象的程序设计,主要分三部分. 理解对象属性: 理解并创建对象: 理解继承. 本文主要从第一方面来阐述: 理解对象属性 首先我们来理解Javascript对象是什么?在 ...
- JavaScript判断对象的类型
JavaScript判断对象的类型 最近阅读了一些关于JavaScript判断对象类型的文章.总结下来,主要有constructor属性.typeof操作符.instanceof操作符和Object. ...
- JavaScript 访问对象属性和方法及区别
这篇文章主要介绍了浅析JavaScript访问对象属性和方法及区别的相关资料,仅供参考 属性是一个变量,用来表示一个对象的特征,如颜色.大小.重量等:方法是一个函数,用来表示对象的操作,如奔跑.呼吸. ...
- 【java】java获取对象属性类型、属性名称、属性值
java获取对象属性类型.属性名称.属性值 获取属性 修饰符:[在Field[]循环中使用] String modifier = Modifier.toString(fields[i].getModi ...
- C# 取得对象属性类型
1.对象 Object obj; 2.对象属性 Type postType = obj.GetType(); PropertyInfo[] postTypeInfos = postType.GetPr ...
- JavaScript 之 对象属性的特性 和defineProperty方法
对象是无序属性的集合,而这些属性在创建是都带有一些特征值(可以理解为属性的属性,天生自带的),这些特征值是为了实现JavaScript引擎用的,因此JavaScript不能直接访问. JavaScri ...
- JavaScript: 理解对象
ECMA-262 把对象定义为:“无序属性的集合,其属性可以包含基本值.对象或者函数.” 严格来讲,这就相当于说对象是一组没有特定顺序的值.对象的每个属性或者方法都有一个名字,而每个名字都映射到一个值 ...
随机推荐
- hdu 4715(打表)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4715 思路:先打个素数表,然后判断一下就可以了. #include<iostream> # ...
- Linux 文件夹含义(转)
1./bin :获得最小的系统可操作性所需要的命令 2./boot :内核和加载内核所需的文件 3./dev :终端.磁盘.调制解调器等的设备项 4./etc :关键的启动文件和配置文件 5./hom ...
- SqlSession接口和Executor
mybatis框架在操作数据的时候,离不开SqlSession接口实例类的作用.可以说SqlSession接口实例是开发过程中打交道最多的一个类.即是DefaultSqlSession类.如果笔者记得 ...
- 自记(项目npm)
cnpm install pug pug-cli vuex node-sass sass-loader vue-beauty axios 在main.js里面使用vue-beauty: import ...
- 【BZOJ4606】[Apio2008]DNA DP
[BZOJ4606][Apio2008]DNA Description 分析如DNA序列这样的生命科学数据是计算机的一个有趣应用.从生物学的角度上说,DNA 是一种由腺嘌呤.胞嘧啶.鸟嘌呤和胸腺嘧啶这 ...
- mysql 修改默认配置 提高性能
解决问题 Lost connection to MySQL server at ‘reading authorization packet’, system error: 0 通过修改 connect ...
- Servlet3.0文件上传
Servelt3.0文件上传作为一种便捷的文件上传方式很是值得我们去应用的 1.Servlet3.0文件上传使用步骤 浏览器端的要求 表单的提交方法必须是post 必须有一个文件上传组件 <in ...
- 170317、到底什么时候该使用MQ?
一.缘起 一切脱离业务的架构设计与新技术引入都是耍流氓. 引入一个技术之前,首先应该解答的问题是,这个技术解决什么问题. 就像微服务分层架构之前,应该首先回答,为什么要引入微服务,微服务究竟解决什么问 ...
- Linux下查看mysql路径
ps -ef|grep mysql
- d3.js 之关联数据:data操作符
数据可视化 在可视化工作中,一个基本出发点是将不同的数值映射到不同的可视化 元素的属性上,使其表现出各自不同的视觉特征. 比如:以数组中的每一个值为直径分别创建一个圆,我们得到三个圆: 在d3中,可视 ...