批改状态:合格
老师批语:
let obj = {//用一个data属性包裹,便于分类管理data: {name: "Tom",email: "123@qq.com",},//方法:读getinfo() {return this.data.name + ":" + this.data.email;},//方法:写setinfo(value) {this.data.email = value;},};obj.data.email = "234@qq.com";console.log(obj.getinfo()); //打印:Tom:234@qq.com
let obj = {}; //首先要创建空对象obj.data = {}; //创建一个分类管理的对象obj.data.name = "zhangsan"; //属性初始化(赋值),挂在到分类管理的对象data上obj.data.age = 18;obj.data.sex = "male";//方法:读obj.getinfo = function () {return this.data.name + ":" + this.data.age + ":" + this.data.sex;};//方法:写obj.setinfo = function (value1, value2) {obj.data.age = value1;obj.data.sex = value2;};obj.data.age = 20;obj.data.sex = "female";console.log(obj.getinfo()); //打印:zhangsan:20:femaleconsole.log(obj.data.name); //分别打印属性,造成了代码冗余,用下述的访问接口操作console.log(obj.data.age);console.log(obj.data.sex);
let obj = {data: {name: "zhangsan",age: 20,},// 属性访问接口// 这是"访问器属性",实际上就是方法,只不过伪装成了属性,套了一个属性的马甲get name() {return this.data.name;},set name(value) {this.data.name = value;},};obj.name = "lisi";console.log(obj.name); //打印:lisi
专门用于创建对象(实例)的函数就是构造函数
// 构造函数:在函数里创建一个对象,3个步骤let User1 = function (name, age) {// 步骤1:创建一个空对象let obj = {};// 步骤2:创建对象属性obj.name = name;obj.age = age;//步骤3:返回对象return obj;};let user2 = User1("Tom", 29);console.log(user2); //{name: 'Tom', age: 29}let user3 = User1("Jerry", 31);console.log(user3); //{name: 'Jerry', age: 31}
// 默认创建了空对象,所以不用再创建了,只需要在函数中使用this引用对象即可let User2 = function (name, age) {//console.log(this) 去掉第9行的new,然后打印该行,查看this的指向为window,并未指向默认创建的新对象,所以应该用 new 来调用修正this.name = name;this.age = age;};//默认返回当前对象,所以不需要返回对象returnlet user3 = new User2("Tom", 21);console.log(user3); //{name: 'Tom', age: 21}
注意:
let user3 = new User2("Tom", 21); 使用了new来调用指向创建的新对象,如果不使用new则返回undefinedJS中没有“类”,所谓“类”其实就是函数
class User1 {// 公共成员name = "Tom";// 构造方法/创建实例constructor(name, age) {// 自有属性this.name = name;this.age = age;}// 共享成员getinfo() {return `${this.name}:${this.age}`;}// 静态成员static status = "enable";}const user = new User1("Jerry", 24);console.log(user.getInfo());
class User2 extends User1 {constructor(name, age,sex) {super(name,age)this.sex = sex;}getinfo() {return `${super.getinfo()},${this.age}`;}}const user2 = new User2("Jerry", 24,'male');console.log(user2.getInfo());
注意:
//赋值let [name, email] = ['Tom', '123@qq.com'];//更新[name, email] = ['Jerry', '456@qq.com'];//参数不足let [name, email, age=18] = ['Jerry', '456@qq.com'];//参数过多let [num_a, num_b,...rest] = [1,2,3,4,5,6,7,8,9];
// 赋值let obj = ({ id, name, age } = { id: 1, name: "Tom", age: 21 });// 更新obj = { id, name, age } = { id: 2, name: "Jerry", age: 31 };console.log(obj);
// 赋值let { id, price, num } = { id: 100, price: 200, num: 300 };// 更新({ id, price, num } = { id: 102, price: 203, num: 304 });console.log({ id, price, num });
注意:
在更新的时候需要在两侧加上中括号()({ id, price, num } = { id: 102, price: 203, num: 304 });
如果左边模板中的变量存在命名冲突怎么办? 起一个别名
let { id: itemId, num, price } = { id: 123, num: 10, price: 1234 };console.log(itemId, num, price);
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号