JavaScript的对象也是一个变量,但是对象可以包含多个值 (使用键值对的写法 key:value)
var man= '18';
var man={
name:"lisi";
age:"18";
}
//这两种都可以说是对象
访问对象的两种方法一个是通过 . 符号 或者是中括号[]
man.age 和 man["age"]
访问出来结果是一样的
对象的方法可以定义一个函数
对象的属性之间一定要用逗号隔开;
对象的方法定义了一个函数,并作为对象的属性存储。
对象方法通过添加 () 调用 (作为一个函数)。
也可以通过new object 来使用自定义构造函数的方式来初始化对象
var person = {
firstName: "John",
lastName : "Doe",
id : 5566,
fullName : function()
{
return this.firstName + " " + this.lastName;
}
};
console.log(person.fullName())//记得加上括号,输出的值为 John Doe
console.log(person.fullName) //无括号 输出的值为function() { return this.firstName + " " + this.lastName; } 显示其的函数属性
使用new object 创建对象
var person=new Object();
person.name='小明';
person.sex='男';
person.method=function(){
return this.name+this.sex;
}
实现对对象遍历(这里使用的是 for..in 方法)
//创建对象 属性的定义相当于:key : string
var person = {
firstName: "John",
lastName : "Doe",
id : 5566,
};
//循环遍历 输出结果
for(var key in person){
console.log(key+"--"+obj[key]);
}
结果:
firstName--John
lastName-Doe
id--5566
深入了解对象
ECMAScript中有两种属性:数据属性、访问器属性。
数据属性:(个人看法:是对使用object.defineProperty 创建的对象内在属性的设置;
Object.defineProperties() 这个是定义多个的)
【Configuration】 设置定义属性是否能通过delete删除;默认值是true
【Enumerable 】 设置定义属性能否通过for in 循环来返回属性;默认是true
【Writable 】 设置定义属性能否修改属性的值
【Value】 设置属性的添加数据
使用Object.getOwnPropertyDescriptor()来查询属性
var person={
name:'zhangsan',
age:18
}
//添加
Object.defineProperty(person,'like',{
configurable:true,
enumerable:true,
writable:true,
value:'play'
})
//试一试输出结果
console.log(person.like);
//可以试一试将其他结果改成false 看看结果
Object.defineProperty(obj,"like",{wirtable:false})
person.like='eat'
console.log(person.like)
//输出结果还是play
var desc = Object.getOwnPropertyDescriptor(person,'like')
console.log(desc)
结果为
{
configurable:true,
enumerable:true,
writable:true,
value:'play'
}
访问器属性:这个属性不包含数据,包含一对get和set方法(双向绑定的原型),但是访问器不能直接定义必须使用object.defineProperty()方法来定义。可以通过Object.getOwnPropertyDescriptor()查询
包含四个属性:
【Configuration】 设置定义属性是否能通过delete删除;默认值是true
【Enumerable 】 设置定义属性能否通过for in 循环来返回属性;默认是true
【get】 读取数据时调用函数,默认为undefined
【set】 写入属性时调用的函数,默认值为undefined
var person={
name:'zhangsan',
_age:'18'
}
Object.defineProperty(person,'age',{
get: function(){
return this._age;
},
set: function(year){
if(year>this._age){
this._age=year //这个是通过一个绑定转换数据
this.name='lisi' //因为name是全局函数,这个是直接改变数据,未绑定
}
}
});
console.log(person.age);
person.age=19;
console.log('修改过的'+ person.age);
console.log(person.name);
//输出结果
console.log(person.age);
person.age=19;
console.log('修改过的'+ person.age);
console.log(person.name);
//文章是去看了其他人的内容书写的,太多人了,我没办法一一找到链接