您的位置:首页 > Web前端 > JavaScript

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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: