js对象
////// 对象
var obj1 = {};
var obj1 = new Object();
// 通过引用寻址
c = obj1;
c == obj1;
- //// 属性
a = 'age'
c.age || c['age'] || c[a]
// 循环 forin
for (const i in object) {
object[i]
}
// 添加属性
c.pro = 'pro'
// 删除
delete c.pro
- //// 方法
c.func = () => { }
// this指拥有该函数的对象
c.func() || this.func()
c.func // 返回函数定义
- //// 构造函数 , 第一个 this可以不传,但是ts和Vetur会有提示, 这里的对象定义是 function 开头的, 去掉 this. 的属性,就是一个方法,不通的是,对象构造函数名应该大写
function Person(this: any, firstName, lastName, age, eyeColor) {
this.firstName = firstName;
this.lastName = lastName;
this.age = age;
this.eyeColor = eyeColor;
this.changeName = function (name) {
this.lastName = name;
};
}
let cc = new Person("33", "44", "55", "66");
- //// 显示对象
console.log(cc); // 显示整个对象,键值对
console.log(Object.values(cc)); // 显示对象值的数组, 可以将对象转成数组
console.log(JSON.stringify(cc)); // 显示为字符串, 过滤掉对象方法
Object.values(JSON.parse(JSON.stringify(cc))) // 获取对象去掉方法的值数组
console.log(cc.changeName.toString()) // 对象方法转为字符串
- //// Getter 和 Setter (es5) 定义对象访问器,简洁
var obj = {
counter: 0,
get increment() {
this.counter++;
},
set add(value) {
this.counter += value;
}
}
Object.defineProperty(obj, "reset", {
get: function () { this.counter = 0; }
});
obj.increment;
obj.add = 5;
console.log(obj.counter);
- //// 向对象构造器添加新属性
Person.prototype.nationality = "English"; // prototype取自顶级继承的 Object.prototype,所有对象都继承Object
- //// 管理对象
Object.create()// 以现有对象为原型创建对象
Object.defineProperty(object, property, descriptor)// 添加或更改对象属性
//Object.defineProperty(person, "year", {value:"2008"});
Object.defineProperties(object, descriptors)// 添加或更改对象属性
Object.getOwnPropertyDescriptor(object, property)// 访问属性
Object.getOwnPropertyNames(object)// 以数组返回所有属性名
Object.getPrototypeOf(object)// 访问原型
Object.keys / values(object)// 以数组返回可枚举属性名/值
- //// 保护对象
Object.preventExtensions(object)// 防止向对象添加属性
Object.isExtensible(object)// 如果属性可以添加到对象,则返回 true
Object.seal(object)// 防止更改对象属性(不是值)
Object.isSealed(object)// 如果对象被密封,则返回 true
Object.freeze(object)// 防止对对象进行任何更改
Object.isFrozen(object)// 如果对象被冻结,则返回 true
- //// 更改元数据
writable: true // 属性值可更改
enumerable: true // 属性可枚举
configurable: true // 属性可重新配置
Object.defineProperty(person, "language", { writable: false });
// 定义 getter
Object.defineProperty(person, "fullName", {
get: function () { return this.firstName + " " + this.lastName; }
});
- //// Map 对象 ,键值对,记得插入顺序,可以使用对象作键,没有默认值
new Map() //创建新的 Map 对象。
set() //为 Map 对象中的键设置值。
get() //获取 Map 对象中键的值。
entries() //返回 Map 对象中键/值对的数组。
keys() //返回 Map 对象中键的数组。
values() //返回 Map 对象中值的数组。
size //获取 Map 对象中某键的值。
clear() //删除 Map 中的所有元素。
delete() //删除由键指定的元素。
has() //如果键存在,则返回 true。
forEach() //为每个键/值对调用回调。
- //// Set 对象,唯一值的集合
new Set() //创建新的 Set 对象。
add() //向 Set 添加新元素。
clear() //从 Set 中删除所有元素。
delete() //删除由其值指定的元素。
entries() //返回 Set 对象中值的数组。
has() //如果值存在则返回 true。
forEach() //为每个元素调用回调。
keys() //返回 Set 对象中值的数组。
values() //与 keys() 相同。
size //返回元素计数。