JavaScript 对象的基本知识
js对象和属性的基本定义
(function(){ $(document).ready(function(){ return "object define"; //创建对象实例 var person = new Object(); person.name = "Nicholas"; person.age = 29; person.job = "Software Engineer"; person.sayName = function(){ alert(this.name);//this代表的是本对象,就是调用这个方法的对象person }; //常用的对象字面量语法 var person = { name : "Nicholas", age : 29, job : "Software Engineer", //最后一个属性,不需要加逗号 sayName : function(){ alert(this.name); } }; }); })();
属性类型的基本应用
1、数据属性
(function(){ return; $(document).ready(function(){ //对象的属性类型(property) 数据属性和访问器属性 //数据属性 //[[Configurable]] : 是否可以通过delete 删除属性从而重新定义、能否修改属性的特性,或者把属性改为访问器属性 //[[Enumerable]] : 表示能否用for-In 循环返回属性 //[[Writable]] : 表示是否可以修改属性的值 //[[Value]] : 保存这个属性的值。 这个值默认为undefined /* **直接在对象上定义的属性, 他们的数据属性,[[Configurable]] [[Enumerable]] [[Writable]] 默认都为false [[Value]] 则为设置的值 ** */ var person = {}; //参数为, 对象、属性、描述符对象 Object.defineProperty( person, "name", { writable:false, //person对象的属性name的值不允许修改,为只读 value : "Nicholas" } ); person.name = "Greg"; //name 为只读,非严格模式下会忽略, 严格模式下会报错 console.log(person.name);// "Nicholas" Object.defineProperty( person, "age", { configurable:false, value:25, writable : false, enumerable:false } ); console.log("删除属性age前的值:"+person.age); delete person.age; console.log("删除属性age后的值:"+person.age);//configurable 设置了false,此属性age不可更改,不能删除 try{ Object.defineProperty( person, "age", { configurable:true, value : 33 } ); //严 格模式下会报错 } catch(e){ console.log("定义的age属性的configurable为不可以修改,所以不能重新修改属性的配置,也不能删除"+e.message); } console.log("age1:"+person.age); person.age = 44; console.log("age2:"+person.age); try{ Object.defineProperty( person, "age", { writable:true, value : 34 } ); } catch(e) { console.log("定义的age属性的configurable为不可以修改,所以不能重新修改属性的配置,也不能修改writable属性"+e.message); } person.age=44; console.log("age3:"+person.age); console.log("==========="); try{ Object.defineProperty( person, "age", { enumerable:true } ); } catch(e) { console.log("定义的age属性的configurable为不可以修改,所以不能重新修改属性的配置,也不能修改enumerable属性"+e.message); } Object.defineProperty( person, "job", { enumerable:true, value :"" } ); for(var property in person) { console.log("person对象的属性有:" + property); } console.log("age属性设置了不可枚举和name属性可枚举默认为false,所以只有job设置了可枚举的数据属性。"); }); })();
2、访问器属性
(function(){ /*访问器属性 getter和setter两个函数 [[Configurable]] :同“数据属性”的解释 [[Enumerable]] :同“数据属性”的解释 [[Get]]:读取属性时的值 默认值为undefined; 设置之后表示可读。 [[Set]]:写入设置时属性的值 默认值 undefined; 设置之后表示可写。 [[Get]] / [[Set]] 只能在Object.defineProperty();中定义 */ $(document).ready(function(){ var book = { _year:2004,//加_标记的时候,一般表示只能通过对象中的方法访问,不使用直接访问方式。如getyear(); 这个常用的标记。 edition:1, num:2, getyear:function(){ return this._year; } };//此定义是数据属性方式的定义; Object.defineProperty( book, "year", { get:function(){ return this._year;//this代表的是本对象,就是调用这个方法的对象book }, set:function(value){ if(value > 2004) { this._year = value; this.edition = this.edition + value - 2004; } } } ); book.year = 2006; console.log("book.edition:"+book.edition); console.log("book._year:"+book.getyear()); // 严格模式下。如果只设置了get属性,为只读,做写入操作会报错。只设置set属性,为只写不可读,做读取操作的时候会报错 。 //非严格模式下,只写的属性,读取的时候返回undefined。 Object.defineProperty( book, "author", { set:function(value){ this.author = value; } } ); console.log(book.author);//undefined //ECMAScript 5之前有访问器属性的两个非标准的方法: _defineGetter_ 和 _defineSetter_ console.log("ECMAScript 5之前有访问器属性的两个非标准的方法: _defineGetter_ 和 _defineSetter_"); book.__defineGetter__("pageNum",function(){ return this.num; }); book.__defineSetter__("pageNum",function(value){ this.num = value; });//set 不能设置本属性的值。否则造成循环设置。内存溢出。 console.log("book.pageNum:"+book.pageNum); book.pageNum = 500; console.log("book.pageNum:"+book.pageNum); //设置多个属性值,数据属性和访问器属性可以一起用。 var person = {}; Object.defineProperties( person, { _name : { value : "Nicholas", writable:true }, age :{ value:33 }, name :{ get:function(){ return this._name; }, set:function(value){ this._name = value;//必须设置writable = true 才能修改_name的值 } } } ); console.log(person._name); //Nicholas console.log(person.age); person.name = "Greg"; console.log(person._name); //Greg //读取属性的特性 console.log("读取属性的特性"); var descriptor = Object.getOwnPropertyDescriptor(person,"_name"); console.log(descriptor.value); // Greg console.log(descriptor.configurable); //false; console.log(descriptor.get); //undefined console.log(descriptor.set); //undefined console.log(descriptor.writable); //true console.log(descriptor.enumerable);//false }); })();
JavaScript 对象的基本知识的更多相关文章
- javascript——对象的基础知识
一.javascript作为脚本语言可以完成以下任务: 操纵浏览器对象,如窗口的打开与关闭: 操纵Dom树: 通过XMLHttpRequest对象与服务器端进行异步通信: XML编程,借助于Activ ...
- JavaScript对象属性的基础教程指南
JavaScript是使用“对象化编程”的,或者叫“面向对象编程”的.所谓“对象化编程”,意思是把JavaScript能涉及的范围划分成大大小小的对象,对象下面还继续划分对象直至非常详细为止,所有的编 ...
- JavaScript对象基础知识总结
1.什么叫JavaScript对象? 定义:名值对的集合.简单的讲就是容纳属性值和属性值的容器,这些属性可以是无序的,基本上JavaScript中所有的事物都可以看成对象. 拓展:我们经常说,数组也是 ...
- 摘:JavaScript性能优化小知识总结
原文地址:http://www.codeceo.com/article/javascript-performance-tips.html JavaScript的性能问题不容小觑,这就需要我们开发人员在 ...
- javascript对象的一点理解
<script type="text/javascript"> /* js对象:对象的职责是调用属性和调用方法 */ //1.对象的创建的三种方式 var obj = ...
- 关于JavaScipt对象的基本知识
关于JavaScipt对象的基本知识 JavaScript是运用“对象化编程”的,又叫“面向对象编程”的.所谓“对象化编程”,意义是把JavaScript能涉及的领域划分成各种对象,对象后面还连续划分 ...
- Javascript对象属性与方法汇总
Javascript对象属性与方法汇总 发布时间:2015-03-06 编辑:www.jquerycn.cn 详细介绍下,javascript对象属性与对象方法的相关知识,包括javascript字符 ...
- 【知了堂学习笔记】/JavaScript对象--/暖妮
JavaScript对象 1.什么是JavaScript对象? JavaScript 中的所有事物都是对象:字符串.数字.数组.日期,等等. 在 JavaScript 中,对象是拥有属性和方法的数据. ...
- 第五章 JavaScript对象及初识面向对象
第五章 JavaScript对象及初识面向对象 一.对象 在JavaScript中,所有事物都是对象,如字符串.数值.数组.函数等. 在JavaScript对象分为内置对象和自定义对象,要处理一些 ...
随机推荐
- ArcGIS API中FindTask中文搜索无效,服务器编码问题URIEncoding="utf-8"
问题来源:字符编码问题导致ArcMap中字符乱码或显示不正常,因而在F:\Program Files\ArcGIS\Server\framework\runtime\tomcat\conf中serve ...
- SVN修改用户名与密码
由于在svn的界面中并没有为我们提供直接更换用户名密码的地方,所以一旦我们需要更换用户名的就需要自己想一些办法. 解决方案如下: 在Eclipse使用SVN的过程中大多数人往往习惯把访问SVN的用户名 ...
- shell循环
for循环 for循环一般格式为: for 变量 in 列表 do command1 command2 ... commandN done 列表是一组值(数字.字符串等)组成的序列,每个值通过空格分隔 ...
- storm入门(二):关于storm中某一段时间内topN的计算入门
刚刚接触storm 对于滑动窗口的topN复杂模型有一些不理解,通过阅读其他的博客发现有两篇关于topN的非滑动窗口的介绍.然后转载过来. 下面是第一种: Storm的另一种常见模式是对流式数据进行所 ...
- JTA 深度历险 - 原理与实现
转自http://www.ibm.com/developerworks/cn/java/j-lo-jta/ 在 J2EE 应用中,事务是一个不可或缺的组件模型,它保证了用户操作的 ACID(即原子.一 ...
- iOS Developer:真机测试
如果出现ios development一项为灰色不可点击状态,苹果的说法是 如果您要为此电脑添加证书,请revoke以前的证书后添加,或者通过以前的mac导出证书 原文不记得了,大概这个意思,苹果不希 ...
- 第七章 内存管理单元MMU介绍
7.1 内存管理单元MMU介绍 7.1.1 S3C2410/S3C2440 MMU特性 负责虚拟地址到物理地址的映射,并提供硬件机制的内存访问权限检查 特性: 与ARM V4兼容的映射长度.域.访问权 ...
- iOS -- 透明H5(webView)效果的实现
前几天有一个完全透明的webView加载H5页面的效果的实现,就相当于是一个半透明的遮罩层,上面有一个不透明的图片,一般原生的带遮罩层的弹框会采用这种方式,如果是原生代码实现,就简单的多了,视图的叠加 ...
- 【C++】DDX_Control、SubclassWindow和SubclassDlgItem的区别
在自绘窗口的时候,子类化是MFC最常用的窗体技术之一.什么是子类化?窗口子类化就是创建一个新的窗口函数代替原来的窗口函数. Subclass(子类化)是MFC中最常用的窗体技术之一.子类化完成两个工作 ...
- mfc
(1)编写mfc程序的基本步骤: 1.资源编辑: 2.关联控件变量: 3.编写新的类和成员函数: 4.添加消息处理函数. (2)消息映射机制: (3)常用控件: (4)界面美化: