批改状态:合格
老师批语:
一次性添加
let item = {// 添加data,结构更清晰data: {name: "手机",num: 2,price: 5000,},};console.log(item.data);
逐个追加
let item = {};item.data = {};item.data.name = "电脑";item.data.price = 6000;console.log(item.data);// 读操作item.getPrice = function () {return this.data.price;};// 写操作item.setPrice = function (value) {this.data.price = value;};console.log(item.getPrice());item.setPrice(2000);console.log(item.getPrice());
let item = {data: {name: "手机",price: 5000,},// ===============访问接口===================================// 读操作getPrice() {return this.data.price;},// 写操作setPrice(value) {this.data.price = value;},// =================================================};console.log(item.data);console.log(item.getPrice());item.setPrice(5500);console.log(item.getPrice());
数据验证
let item = {};item.data = {};item.data.name = "电脑";item.data.price = 6000;console.log(item.data);// 读操作item.getPrice = function () {return this.data.price;};// 写操作item.setPrice = function (value) {// 如果价格小于等于0,返回falseif (value <= 0) return false;this.data.price = value;};console.log(item.getPrice());item.setPrice(-2000);console.log(item.getPrice());
let item = {data: {name: "电脑",price: 3000,},// name读操作get name() {return this.data.name;},// price读操作get price() {return this.data.price;},};// =============================================console.log(`${item.data.name} : ${item.data.price}`);console.log(`${item.name} : ${item.price}`);
1.自有成员
// 构造函数,必须要用new来调用let User = function (name, price) {// 直接在函数中用this引用这个空对象// 为这个新对象添加属性或方法this.name = name;this.price = price;// this指向,没有指向新对象,而是指向全局};// new,会自动把当前的this指向新对象let user = new User("手机", 6000);console.log(user);
2.共享成员
let User = function (name, price) {// 自有属性 : 用来区分不同对象this.name = name;this.price = price;// 共享方法 : 调用的方法完全相同this.getInfo = function () {return `商品:${this.name},价格:${this.price}`;};};let user = new User("手机", 6000);console.log(user);// 两个对象的属性不同,但方法完全相同,造成了代码冗余// 多余的方法, 实际上应该是被左右实例所共享, 只需要保留一个方法父本// 查看对象的构造器(构造函数)console.log(user.constructor === User); // 结果返回trueconsole.dir(User); //可以看到函数更多的细节// 所有函数都有一个原型属性prototype// 这个原型属性,对于普通函数来说, 没啥用// 但是对于构造函数来说,极其有用// 构造函数原型属性的成员, 可以被该构造函数的所有实例所共享// -------------------------------------------------------------------let User1 = function (name, price) {this.name = name;this.price = price;};// 将对象的共享成员挂载到原型属性User1.prototype.getInfo = function () {return `商品:${this.name},价格:${this.price}`;};let user1 = new User1("手机", 6000);let user2 = new User1("电脑", 8000);console.log(user1, user2);
3.私有成员
let User = function (name, price) {this.name = name;this.price = price;// 私有成员let remarks = "数码产品";};
4.静态成员 :当前的属性或方法,只能通过构造函数访问,不能用实例访问
let User = function (name, price) {this.name = name;this.price = price;};// 静态成员// 函数也是对象, 是对象就可以添加属性User.nation = "中国";// 只能用当前构造器访问console.log(User.nation);
5.继承 : 基于’原型’实现继承
// 父级构造函数let Parent = function () {};Parent.prototype.sum = function () {return this.a + this.b;};// 子类构造器let Sun = function (a, b) {this.a = a;this.b = b;};Sun.prototype = Parent.prototype;let sun = new Sun(10, 20);console.log(sun.sum());
声明 : class Demo {}
构造方法和共享成员不能加分号
// class 声明类class Demo {// 公共成员username = "数码";// 构造方法,实例初始化constructor(name, price) {this.name = name;this.price = price;}// 公享成员getInfo() {return `${this.name} : ${this.price}`;}// 静态成员static status = "123";}let demo = new Demo("电视", 20000);console.log(demo.getInfo());// 访问静态成员console.log(Demo.status);
继承
// 父类class Demo {// 构造方法,实例初始化constructor(name, price) {this.name = name;this.price = price;}// 公享成员getInfo() {return `名称:${this.name},价格:${this.price}元`;}}// 子类// extends 继承class Demo2 extends Demo {constructor(name, price, num) {// super()会自动的调用父级的构造器来初始化该实例super(name, price);this.num = num;}// 子类中对父级的方法进行扩展getInfo() {return `${super.getInfo()},数量是${this.num}台`;}}let demo2 = new Demo2("电视", 30000, 20);console.log(demo2.getInfo());
1.数组解构
let user = ["张三", 25];// 数组解构 模板=值let [username, age] = ["张三", 25];console.log(username, age);// 更新[username, age] = ["李四", 25];console.log(username, age);// 参数不足:默认值[username, age, sex = "男"] = ["李四", 25];console.log(username, age, sex);// 参数过多let [a, b, c, ...arr] = [1, 2, 3, 4, 5];console.log(a, b, c);console.log(...arr);
用途 : 两数交换
let x = 10;let y = 20;[y, x] = [x, y];console.log(x, y);
2.对象解构
let { name, age } = { name: "Wang", age: 25 };console.log(name, age);
更新
let { name, age } = { name: "Wang", age: 25 };console.log(name, age);// 更新 必须要用 '()' 包住内容({ name, age } = { name: "Wang", age: 23 });console.log(name, age);
模板冲突
let { id, name, age } = { id: 1, name: "Wang", age: 25 };console.log(id, name, age);// 如果左边模板中变量存在明明冲突 : 起别名let { id: sex_id, sex } = { id: 1, sex: "男" };console.log(sex_id, sex);
用途 : 使用对象的解构来优化函数的声明
let user = { id: 1, name: "Wang", age: 25, sex: "男" };function getUser({ id, name, age, sex }) {console.log(id, name, age, sex);}getUser(user);
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号