js 面向对象编程
2013-11-10 20:42
344 查看
定义:
无序属性值的集合,属性可以是基本值,对象或者是函数。(数组也可以看做是对象,下标是属性名)数据属性:
configurable :表示能否通过delete删除属性从而重新定义属性,能否修改属性的特性或者能否把属性修改为访问器属性。enumerable:表示能否通过for-in循环返回属性。writable:表示能否修改属性的值。value:包含这个属性的数据值。要修改属性默认的特性(前三个默认为true,最后一个默认为undefined,这也是为什么属性定义了而未初始化的时候是undefined的原因。)。必须使用Object.defineProperty()方法,这个方法接受三个参数,属性所在的对象、属性的名字和一个描述符对象(上面四个中的一个或者多个)访问器属性
configurable,enumerable属性同上。get:在读取属性时调用的函数;set:在设置属性时候使用的方法。访问器属性不能直接定义,必须使用Object.defineProperty()来定义。判断属性位置
通过in和hasOwnProperty()来确定属性是在原型中还是在对象中in是沿着原型链一直寻找属性,而hasOwnProperty()只在当前对象中寻找。三种遍历方式for-in,Object.keys(),Object.getOwnPropertyNames()防篡改对象
不可扩展 Object.preventExtens(obj);可删除密封对象Object.seal(obj); 不可扩展,不可删除,已有成员的configurable置为false,但是可写;冻结对象:Object.freeze(obj),不可扩展,不可删除,不可写;成员的writable置为false。安全类型检测
function isArray(v){ return Object.prototype.toString.call(v) == '[object Array]'; //'[object RegExp]' '[object Function]' } alert(isArray([]));
测试代码
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> <title>无标题文档</title> </head> <body> <script type="text/javascript" language="javascript"> var person = {name:'wch'}; person.name = 'wwww'; Object.defineProperty(person,'name',{ writable:false }); person.name = '123'; alert(JSON.stringify(Object.getOwnPropertyDescriptor(person,'name'))); Object.defineProperty(person,'name',{}); alert(JSON.stringify(Object.getOwnPropertyDescriptor(person,'name'))); var book = { _year:2005, edition:1 }; Object.defineProperty(book,'year',{ get:function(){ return this._year; }, set:function(newValue){ this._year = newValue; this.edition ++; } }); book.year = 2009; alert(book.edition); function Person(){ this.name = 'wch'; }; Person.prototype = { name:'111', age:100 }; var person = new Person(); alert(('age' in person) +' : '+ person.hasOwnProperty('age')); for(var key in person){ alert(person[key]); } alert(Object.keys(person)); alert(Object.getOwnPropertyNames(person));
var person = {name : 'wch'};Object.preventExtensions(person);person.age = 29;alert(person.age);alert(person.name);delete person.name; //可删除alert(person.name);Object.seal(person);delete person.name; //不可删alert(person.name);person.name = '11111'; //可以写alert(person.name);Object.freeze(person);delete person.name; //不可删alert(person.name);person.name = '11111'; //不可以写alert(person.name);</script></body></html>
相关文章推荐
- 如何判断对象是否数组?
- JSON转化为Tree
- JavaScript的对象深度克隆
- JavaScript正则表达式的用法
- javaScript call 函数的用法说明
- javaScript call 函数的用法说明
- JSP转译成Servlet详细过程
- 18-JavaScript-基本语法-函数
- JavaScript中的闭包之彻底领悟
- 用js轻松实现网页弹出层
- /WEB-INF/userManage.jsp(31,82) Unterminated ${ tag
- javascript学习点滴
- Javascript_6_自定义对象
- JS
- js右下弹出消息框,兼容ie,firefox
- js格式化当前时间为yyyy-mm-dd形式
- 17-JavaScript-基本语法-流程控制
- Javascript获取innerText,对IE和FF的兼容性问题?
- Js中的闭包问题
- C#WinForm与JS通讯