JS进阶笔记4

简介: JS进阶笔记4

2.5 JavaScript对象


JavaScript面向对象编程概述:


JavaScript中对象的定义为:无序属性的集合,其中的属性可以是基本值、对象或者函数(ECMA-262)。简单来说,对象就是一组无序的名称/值对。当值为基本值或对象时,这样的名称/值对称为对象的属性及属性值,当值为函数时,这样的名称/值对称为对象的方法。


JavaScript对象的创建:


方法一:调用Object()创建对象


image.png


方法二:使用对象字面量,相比方法一,更简洁


image.png


方法三:使用构造函数模式:构造函数实质上是具有如下特点的普通函数:


  • 构造函数内通常使用this关键字对属性和方法赋值


  • 通过 new 构造函数名()的形式调用构造函数创建对象


  • 构造函数不需要返回值


  • 注意:构造函数与普通函数无实质区别,普通函数也可以执行 new 普通函数(),只是函数内没有通过this对属性和方法赋值,创建的是空对象,构造函数也可以像普通函数那样被调用


function Student(num, name, dob, gender) {
    this.num = num;
    this.name = name;
    this.dob = dob,
    this.gender = gender;
    this.getAge = function () {
        let now = new Date();
        let diffInMM = now - this.dob;
        return Math.trunc(diffInMM / (1000 * 60 * 60 * 24 * 365));
    };
    this.toString = function () {
        return `学号:${this.num},姓名:${this.name},年龄:${this.getAge()},性别:${this.gender}`;
    };
}
let stu1 = new Student('2018111123', '张华', new Date('2001-10-20'), '女');
let stu2 = new Student('2018111124', '刘晓', new Date('2001-07-15'), '男');
console.log(stu1.toString());
console.log(stu2.toString());
  • 原型(Prototype)


  • 在JavaScript中,每个函数均有一个prototype(原型)属性,其值为一个对象,称为“原型对象”


  • 所有的对象均有一个__proto__(proto前后两个下划线)属性,通过调用new 函数名()创建的对象,其__proto__属性指向该函数的prototype


  • 将属性、方法放置在构造函数的prototype中,可实现所有实例对象共享这些属性和方法


image.png


2.6 原型链和对象的继承


当访问一个对象的某个属性时,会先在这个对象本身属性上查找,如果没有找到,则会去它的__proto__隐式原型上查找,即它的构造函数的prototype,如果还没有找到就会再在构造函数的prototype的__proto__中查找,这样一层一层向上查找就会形成一个链式结构,我们称为原型链。使用class关键字定义类


  • 现有的基于原型的继承的语法糖
class Rectangle {
  constructor(height, width) {
    this.height = height;
    this.width = width;
  }
}


  • 不同于函数声明,类声明不会提升,先声明,后访问

let p = new Rectangle(); // ReferenceError
class Rectangle {}


匿名类


// 匿名类
let Rectangle = class {
  constructor(height, width) {
    this.height = height;
    this.width = width;
  }
};
console.log(Rectangle.name); // output: "Rectangle"
// 具名类
let Rectangle = class Rectangle2 {
  constructor(height, width) {
    this.height = height;
    this.width = width;
  }
};
console.log(Rectangle.name); // 输出: "Rectangle2"


相关文章
|
1月前
|
JavaScript 前端开发 程序员
前端学习笔记——node.js
前端学习笔记——node.js
38 0
|
14天前
|
自然语言处理 JavaScript 前端开发
[JS]同事看了我做的this笔记,直摇头,坦言:我还是参考启发博文吧
本文介绍了JavaScript中`this`关键字的重要性和使用规则。作者回顾了早期笔记,总结了`this`指向的各种情况,并分享了最新的理解。文章强调了`this`在不同上下文中的指向,包括对象方法、全局函数、箭头函数等,并提供了改变`this`指向的方法。适合JavaScript开发者参考。
31 2
|
2月前
|
JavaScript 前端开发 Java
JavaScript笔记(回顾一,基础知识篇)
JavaScript基础知识点回顾,包括语言定义、ECMAScript规范、字面量、变量声明、操作符、关键字、注释、流程控制语句、数据类型、类型转换和引用数据类型等。
JavaScript笔记(回顾一,基础知识篇)
|
3月前
|
存储 缓存 自然语言处理
深入理解JS | 青训营笔记
深入理解JS | 青训营笔记
39 0
|
4月前
|
前端开发 JavaScript 安全
JavaScript进阶-JavaScript库与框架简介
【7月更文挑战第11天】JavaScript库和框架加速Web开发,但也带来挑战。选择适合项目、团队技能的库或框架,如React、Angular、Vue,是关键。保持依赖更新,注意性能优化,避免过度依赖。遵循最佳实践,确保安全性,如防XSS和CSRF。学习基础,结合代码示例(如React计数器组件),提升开发效率和应用质量。
58 1
|
4月前
|
缓存 JavaScript 前端开发
JavaScript进阶 - Web Workers与Service Worker
【7月更文挑战第4天】JavaScript的Web Workers和Service Worker增强了Web性能。Web Workers处理后台多线程,减轻主线程负担,但通信有开销,受同源策略限制。Service Worker则用于离线缓存和推送通知,需管理其生命周期、更新策略,并确保安全。两者都带来了挑战,但也极大提升了用户体验。通过理解和优化,开发者能构建更高效、安全的Web应用。
123 2
|
4月前
|
资源调度 JavaScript 前端开发
JavaScript进阶 - JavaScript库与框架简介
【7月更文挑战第5天】JavaScript库和框架构成了前端开发的核心,如jQuery简化DOM操作,Angular、React和Vue提供全面解决方案。选择时要明确需求,避免过度工程化和陡峭学习曲线。使用版本管理工具确保兼容性,持续学习以适应技术变化。示例展示了jQuery和React的简单应用。正确选择和使用这些工具,能提升开发效率并创造优秀Web应用。
49 2
|
4月前
|
缓存 前端开发 JavaScript
JavaScript进阶 - Web Workers与Service Worker
【7月更文挑战第10天】在Web开发中,Web Workers和Service Worker提升性能。Workers运行后台任务,防止界面冻结。Web Workers处理计算密集型任务,Service Worker则缓存资源实现离线支持。常见问题包括通信故障、资源限制、注册错误及缓存更新。通过示例代码展示了两者用法,并强调生命周期管理和错误处理的重要性。善用这些技术,可构建高性能的Web应用。
86 0
|
4月前
|
XML 前端开发 JavaScript
JavaScript进阶 - AJAX请求与Fetch API
【7月更文挑战第9天】JavaScript进阶:AJAX与Fetch API对比。AJAX用于异步数据交换,XMLHttpRequest API复杂,依赖回调。Fetch API是现代、基于Promise的解决方案,简化请求处理。示例:`fetch('url').then(r => r.json()).then(data => console.log(data)).catch(err => console.error(err))`。注意点包括检查HTTP状态、错误处理、CORS、Cookie和超时。Fetch提高了异步代码的可读性,但需留意潜在问题。
101 0
|
4月前
|
存储 JavaScript 前端开发
JavaScript进阶 - 浏览器存储:localStorage, sessionStorage, cookies
【7月更文挑战第8天】Web开发中的客户端存储技术,如`localStorage`, `sessionStorage`和`cookies`,用于保存用户设置和跟踪活动。`localStorage`持久化存储,`sessionStorage`随页面会话消失。两者提供基本的增删查改操作,但有大小限制和安全风险。`cookies`适合会话管理,可设置过期时间并能跨域。使用时注意存储量、安全性和跨域策略,选择适合场景的存储方式。
193 0