一:创建对象的方式
(1):字面量创建.
(2):构造函数创建.
(3):自定义构造函数创建实例化对象.
//1.字面量创建
var person1 = {
name: '小好'
};
//2.构造函数创建
var person2 = new Object();
person2.name = '小谷';
//3.自定义构造函数
function Person(name, age) {
this.name = name;
// 添加方法
this.sayHello = function() {
console.log('您好');
}
};
var p1 = new Person('小力', 18);
二:定义属性
(1)定义属性
在代码中可以随时为对象添加属性,也可以修改对象内属性的值.
var person1 = {
name: '小好'
};
//给对象添加属性
person1.age = 23;
//修改属性的值
person1.name = '张小好';
console.log(person1.name);
三:属性枚举(又叫遍历)
(1)使用for...in
默认状态下的对象,我们为它添加的属性都是可枚举的,此时我们就可以使用for...in循环遍历对象内的属性.
(2)使用Object.keys(对象名)
此方法会返回一个以传入对象身上的可以被枚举(遍历)的属性组成的数组,对象中所有可以被枚举的属性都会存放在这个数组中.
function Person(name, age, gender) {
// this - 实例化对象
this.name = name;
this.age = age;
this.gender = gender;
this.say = function () {
console.log("yer night rain");
};
}
var obj3 = new Person("张三", 19, "男");
console.log(obj3);//Person {name: '张三', age: 19, gender: '男', say: ƒ}
var rel = Object.keys(obj3);
console.log(rel);// ['name', 'age', 'gender', 'say']
(3)使用Object.getOwnPrototypeNames(对象名)方法
该方法返回一个由指定对象的所有自身属性的属性名(包括不可枚举属性但不包括Symbol值作为名称的属性)组成的数组。
function Person(name, age, gender) {
// this - 实例化对象
this.name = name;
this.age = age;
this.gender = gender;
this.say = function () {
console.log("yer night rain");
};
}
var obj3 = new Person("张三", 19, "男");
var rel = Object.getOwnPropertyNames(obj3);
console.log(rel);//['name', 'age', 'gender', 'say']
-
参数:给定对象。
-
返回值:在给定对象上找到的自身属性对应的字符串数组。
四:检查属性是否存在
(1)检测属性
由于对象的属性可以被随时随地被修改或删除,因此有时候我们需要检查对象的某个属性是否存在。那么通过in
可以判断对象是否有这个属性.这个方法返回的值是一个布尔值.
function Person(name {
// this - 实例化对象
this.name = name;
this.say = function () {
console.log("yer night rain");
};
}
var obj3 = new Person("张三");
console.log('name' in obj3);//true
console.log('age' in obj3);//false
五:删除属性:
(1)删除对象里的属性
我们可以随时给对象添加属性,也可以随时地删除属性。有的人可能会使用null
值赋值给属性,这样并不能删除属性,仅仅是改变了属性的值。我们需要使用delete
操作符将属性从对象中完全删除。
//赋值为undefined,但是属性仍然存在
obj.name = undefined;
//直接删除属性,不论有没有值
delete obj.name;
六:属性特征:
-
1:通用特征:对象的属性的类型分两种:一种是数据属性,一个种是访问器属性。数据属性用来存储一个值,比如所上个例子中的
name
。访问器属性不包含值,而是定义了一个get
和set
函数,当读取属性时,调用get
函数,当写属性时,调用set
函数。
var obj = {
//数据属性
_myname: '小好',
//访问器属性
get name(){
console.log('get方法被调用了');
return this._myname + '1111';
},
set name(value){
console.log('set方法被调用了');
this._myname = value;
}
};
-
2:定义属性:
通过赋值操作定义对象,添加的普通属性,注意:默认情况下都是可修改、可枚举、可配置的。
如果我们想改变属性的特征,可以使用Object.defineProperty()
方法,该方法允许精确地添加或修改对象的属性,在遍历枚举对象属性时会被枚举到([for...in
] 或 [Object.keys
]方法)。
注意:默认情况下,使用 Object.defineProperty()
添加的属性值是不可修改,不可枚举,不可配置(删除和添加)。
//使用语法格式
Object.defineProperty(obj, prop, descriptor)
var obj = {
name: '艾比克泰德',
age: 50,
gender: '男'
}
Object.defineProperty(obj, 'gender', {
configurable: true,
enumerable: true,
writable: true,
})
obj.gender = "女";
console.log(obj)
-
3:定义多个属性:定义单个属性的内部特性使用
Object.defineProperty()
,定义多个属性使用的是Object.defineProperties()
,这个方法接受2个参数,第一个是属性所属的对象,第二个是包含被定义属性的对象。
var obj = {
_age: 2
};
Object.defineProperties(obj, {
name: {
configurable: false,
writable: true,
value: '康德'
},
age: {
get: function () {
return this._age;
},
set: function (newValue) {
if (newValue > 5) {
this._age += newValue;
} else {
this._age = newValue;
}
}
}
});
-
4:获取属性特征:
方法返回指定对象上一个自有属性对应的属性描述符。(自有属性指的是直接赋予该对象的属性,不需要从原型链上进行查找的属性
获取属性的内部特性的方法有两个:
Object.getOwnPropertyDescriptor(obj, prop)
和Object.getOwnPropertyDescriptors(obj)
。
(1).Object.getOwnPropertyDescriptor(obj, prop)
参数
obj
: 目标所在的对象。
prop
: 要获取特性的属性。
2.Object.getOwnPropertyDescriptors(obj)
参数
obj
: 要获取的目标对象。
返回值
所指定的对象的所有自身属性的特性描述符,如果没有任何自身属性则返回空对象。