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    //返回元素计数。
posted @ 2022-07-08 14:41  jqynr  阅读(38)  评论(0)    收藏  举报