前言
文章参考红宝书JavaScript高级程序设计
一、JavaScript对象
ECMA-262把对象定义为:”无序属性的集合,其属性可以包含基本值,对象或者函数。”严格来讲,相当于说对象是一组没有特定顺序的值。对象的每个属性或者方法都有一个名字,而每个名字都映射到一个值。因此,我们可以把ECMAscript的对象想象成散列表(一组名值对,其中值可以是数据或函数)
二、JavaScript创建对象
其中cat为创建对象的名字,name,year,color是cat的属性。introduction是cat的方法
//对象创建(1)
let cat = new Object();
cat.name = "kiki";
cat.year = 2;
cat.color = "black";
cat.introduction = function(){
return cat.name + " is a " + cat.year + " years old " + cat.color + " cat";
}
console.log(cat.introduction());
//kiki is a 2 years old black cat
这也是一种创建对象的方法,两种对象创建的cat对象相同。
//对象创建(2)
let cat = {
name: "kiki",
year: 2,
color: "black",
}
cat.introduction = function(){
return this.name + " is a " + this.year + " years old " + this.color + " cat";
}
console.log(cat.introduction());
//kiki is a 2 years old black cat
三、JavaScript对象属性
对象的属性在创建时都带有一些特征值,js通过这些特征值来定义他们的行为
1.数据属性
数据属性包含一个数据值的位置。在这个位置可以读取和写入值。数据属性有4个描述行为的特性
[[Configurable]]:表示能否通过delete删除重新定义属性,默认true
[[Enumerable]]:表示能否通过for-in循环返回属性,默认true
[[Writable]]:表示能否修改属性的值,默认true
[[Value]]:包含这个属性的数据值,默认underfined
以下两个例子使用Object.defineProperty修改属性的特征值
//修改特征,无法修改
let cat = {}
Object.defineProperty(cat,"color",{
writable:false,
value:"black"
});
cat.color = "white";
console.log(cat.color);
//依然为black
//修改特征,无法删除
let cat = {}
Object.defineProperty(cat,"color",{
configurable:false,
value:"black"
});
delete cat.color;
console.log(cat.color);
//依然为black
2.访问器属性
访问器属性不包含数据值,包含一对getter和setter函数(函数不是必需)。在访问器属性时,调用getter函数,这个函数负责返回有效值。在写入访问器时,会调用setter函数传入新值,这个函数负责如何处理数据。访问器属性有如下4个特性
[[Configurable]]:表示能否通过delete删除重新定义属性,默认true
[[Enumerable]]:表示能否通过for-in循环返回属性,默认true
[[Get]]:在读取属性时调用的函数,默认undefined
[[Set]]:在写入属性时调用的函数,默认undefined
let cat={
_year: 2,
color: "black",
}
Object.defineProperty(cat,"year",{
get: function(){
return this._year;
},
set: function(color_judge){
if(color_judge>10){
this._year=color_judge;
this.color = "white";
}
else{
this._year=color_judge;
this.color = "balck";
}
}
})
console.log(cat.color); //black
cat.year=12;
console.log(cat.color); //white
以上代码创建cat对象,并给两个属性:_year,color。其中访问器属性year包含getter函数和setter函数。getter函数返回_year的值,setter函数根据年龄判断cat的color颜色。然后将数值传递回_year。例如year的值为12时也会改变_year,使其也变成12.
总结
个人学习笔记总结,每天进步多一点