创建对象
1/通过var obj={ } 对象字面量(object literal)法
var obj1={x:3,y:6,z:7}
var obj2={
'x':1,
'y':2,
username:'king',
'for':'Javascript关键字必须放到引号之间'
'first-name':'queen',
married:true,
test:null,
test1:undefined,
salary:12.3,
person:{
username:'king',
age:12,
addr:'peking',
}
};
2/通过new object( )创建对象
var obj3=new object();//创建一个空对象,{}
var arr=new Array();//空数组[]
var date=new Date();//日期时间对象
var reg=new RegExp('js');//创建正则对象
3/通过构造函数创建对象
function Test(){
}
var obj4=new Test();
var obj4=Test();//意为运行该函数
function Test1(num1,num2)
{
this.n1=num1;
this.n2=num2;
}
var obj5=new Test1(5,6);
通过instanceof操作符可以检测一个对象是否由某个指定的构造器函数
alert (obj5 instanceof Test1); //输出true
4/通过Object.create来创建对象
var obj6=Object.create( {x:1} );
var obj7=Object.create(null); //不会继承
var obj8=Object.create(Object.prototype); //创建一个普通的空对象
属性操作
查询属性
①对象名.属性名②对象名[属性名]③当处于某个对象方法内部的时候,可以通过this来访问同一对象的属性
var person={
username:'king',
age:12,
salary:1200,
addr:'peking',
sex:'男'
};
//查询属性
console.log('用户名为'+person.username+'\n'+'性别'+person.sex);
console.log('薪水:'+person['salary']+'\n'+'地址:'+person['addr'])
//如果属性不确定需要使用[]
var key='username';
console.log(person[key]) //不能加''
function PersonInfo(name,age,sex){
this.name=name;
this.age=age;
this.sex=sex;
}
var person1=new PersonInfo('king',34,'男');
console.log(person1.name+person['sex'])
添加属性
var obj={}; //空对象
obj.username='king';
obj.age=12;
obj.addr='peking';
obj['test']='this is a test';
console.log(obj.username+'\n'+obj.age+'\n'+obj.addr+'\n'+obj['test']);
修改制定属性
var obj={}; //空对象
obj.username='king';
obj.age=12;
obj.addr='peking';
obj['test']='this is a test';
console.log(obj.username+'\n'+obj.age+'\n'+obj.addr+'\n'+obj['test']);
删除属性:通过delete删除制定属性
delete obj.test;
只能删除自身属性,不能删除继承属性。
要删除继承属性,只能从定义它属性的原型对象上删除它,而且只会影响到
delete不能删除那些可配置性为false的属性
遍历属性:通过for in遍历属性
var obj1={
x:1,
y:2,
test:'this is a test'
};
for(var p in obj1){
console.log(p+'\n'
);}
// 输出内容为 x y test
通过in检测对象上是否有某个属性
function foo(){};
var obj=new foo();
obj.x=1;
console.log('x' in obj);//可访问原型
console.log(obj.hasOwnProperty('x'));//不访问原型
访问方法
对象名.方法名( ) 如果对象名.方法名的形式,将返回定义函数的字符串
var obj2={
username:'king',
age:12,
sayHi:function(){
return 'say Hi';},
info:function(){
return '用户名'+this.username+'\n'+'年龄:'+this.age+'\n地址:'+this.addr;}
};
console.log(obj2.sayHi());
console.log(obj2.info());
对象结构
对象属性特征
数据属性:4个表述行为的特征:
[[configurable]]
表示是否能通过delete删除属性从而重新定义属性,能否修改属性的特性,或者能否把属性修改为访问器属性。直接在对象上定义的属性,他们的默认值为true
[[Enumerable]]
表示能否通过for in循环返回属性。代表属性
是否可以枚举。直接在对象上定义的属性默认值为true
[[writable]]
表示
能否修改属性的值。默认值为true
[[value]]
包含这个属性的数据值。读取属性值的时候,从这个位置读取。
写入属性值的时候,把新值保存在这个位置。这个特性的默认值为undefined
如果属性不可配置,但是可以把writable的true变成false,但不能将false变为true
存取器属性:get——获取属性的值 set——设置属性的值
使用
//创建一个对象
Object.defineProperty(obj,"x".{
value:1,
writable:true,
enumerable:true,
configurable:true
});
//创建多个对象
var person={};
Object.defineProperties(person,{
'username':{
value:'king',
writable:true,
enumerable:true ,
configurable:true
},
age:{
value:12,
writable:false
}
});
console.log(Object.getOwnPropertyDescriptor(person,"username"));
//得到对象属性描述
属性描述 __proto__:null, //强制没有继承而来的属性 IE不支持
三个相关对象特性
1/原型(prototype)
对象的原型指向另外一个对象,本对象的属性继承它自己的原型对象
- 通过对象字面量创建的对象使用Object.prototype作为它们的原型
- 通过new创建的对象使用构造函数的prototype属性作为他们的原型
- 通过Object.create()创建的对象使用第一个参数(也可以是null)作为它们的原型
检测是否为原型对象:console.log(obj.isPrototypeOf(obj1));
2/对象的类(class)
一个表示对象类型的字符串,
可以通过对象的toString()方法间接查询
3/对象的扩展标记(extensible flag)
指明了是否可以向该对象添加新属性
内建对象之正则(RegExp)对象
语法:var patt=new RegExp(pattern,modifiers);
var patt=/pattern/modifiers; /模式/模式修饰符
常用修饰符
模式