创建单个对象的两种方法
注意点:键值对之间用逗号隔开
字面量方式
栗子:
var obj = {
name: '天天开心',
age: 24
}
构造函数方式
栗子:
var obj = new Object({
name: '事事顺心',
age: 24
})
取值和存值的两种方式
点语法
取值:对象名.属性名
赋值:对象名.属性名="新值"
栗子:
var obj = {
name: '嘿嘿',
age: 24,
hobby: 'codding'
}
console.log(obj.name);
console.log(obj.age);
console.log(obj.hobby);
// 当属姓名不存在时,返回undefined
console.log(obj.height); //undefined
[]语法
取值:对象名'属性名'中必须是字符串
赋值:对象名['属性名'] = "新值"
栗子:
var obj2 = {
name: "嘿嘿",
age: 24,
hobby: '捏人'
}
console.log(obj2);
// 对象名.属性名 = 对象名['属性名']
console.log(obj2['name']); //嘿嘿
console.log(obj2.name); //嘿嘿
var name = "彭彭";
console.log(obj2[name]); //undefined
console.log(obj2[hh]); //hh is not defined
var height = 'height';
console.log(obj2[height]); //undefined
console.log(obj2); //{name: "嘿嘿", age: 24, hobby: "捏人"}
obj2[height] = 100;
console.log(obj2); //{name: "嘿嘿", age: 24, hobby: "捏人", height: 100}
批量创建对象的两种方法
工厂函数
作用:将创建对象的过程用函数封装,就是工厂函数
工厂函数特点:返回的对象都是Object类型
栗子:
function creatPerson(name, age) {
var obj = {
name: name,
age: age,
sayHi: function() {
console.log("大家好,我叫" + this.name);
}
}
return obj;
}
var xm = creatPerson('小明', 18);
console.log(xm);
var xh = creatPerson('小红', 20);
console.log(xh);
自定义构造函数
自定义构造函数特点:
- 先声明一个函数,首字母大写
- 结合new一起使用,创建出来的对象就有了类型
构造函数作用:给创建出的新对象添加属性和方法
new的作用:
- 创建一个对象,让对象有了类型
- 让构造函数的this指向新创建的对象
- 执行构造函数
- 返回这个新创建的对象
栗子:
function Dog(name, gender, age, hobby) {
this.name = name,
this.gender = gender,
this.age = age,
this.hobby = hobby,
this.say = function() {
console.log("你好");
}
this.eat = function () {
console.log("我爱吃肉");
}
}
var dog = new Dog("二哈", '男', 3, '玩球');
console.log(typeof dog); //Dog
console.log(dog);
dog.say(); //你好
浅拷贝
Object.assign(target,source)
方法的第一个参数是目标对象,后面的参数都是源对象。(如果目标对象与源对象有同名属性,或多个源对象有同名属性,则后面的属性会覆盖前面的属性)。
const target = { a: 1, b: 2 };
const source = { b: 4, c: 5 };
const returnedTarget = Object.assign(target, source);
console.log(target); // { a: 1, b: 4, c: 5 }
console.log(returnedTarget); // { a: 1, b: 4, c: 5 }
-
Object.assign()
拷贝的是属性值。假如源对象的属性值是一个对象的引用,那么它也只指向那个引用
展开运算符
对象中的扩展运算符(...)用于取出参数对象中的所有可遍历属性,拷贝到当前对象之中
let bar = { a: 1, b: 2 };
let baz = { ...bar }; // { a: 1, b: 2 }
网友评论