【深入理解JS核心技术】2. 什么是原型链?

原型链是用于在现有对象的基础上构建新类型的对象。它类似于基于类的语言中的继承。

对象实例的原型可以通过 Obeject.getPrototypeOf(object) 或 proto 属性获得,而构造函数的原型可通过 Object.prototype 获得。

构造函数,原型,实例的关系:

每个构造函数都有一个原型对象,原型有一个属性指回构造函数,而实例有一个内部指针指向原型。

原型链的基本思想:(如果原型是另一个类型的实例?)原型当成实例。

意味着这个原型本身有一个内部指针指向另一个原型,相应地另一个原型也有一个指针指向另一个构造函数。这样就在实例和原型之间构造了一条原型链。

function SuperType() {
 this.property = true;
}

SuperType.prototype.getSuperValue = function() {
 return this.property;
};

function SubType() {
 this.subproperty = false;
}

// 继承SuperType
SubType.prototype = new SuperType();

SubType.prototype.getSubValue = function() {
 return this.subproperty;
};

let instance = new SubType();
console.log(instance.getSuperValue()); // true
复制代码
  1. 默认原型

默认情况下,所有引用类型都继承自Object,这也是通过原型链实现的。任何函数的默认原型都是一个Object的实例,这意味着这个实例有一个内部指针指向Object.prototype。

  1. 原型与继承关系

原型与实例的关系可以通过两种方式来确定。第一种方式是使用instanceof操作符,如果一个实例的原型链中出现过相应的构造函数,则instanceof返回true。

确定关系的第二种方式是使用 isPrototypeOf() 方法。原型链中的每个原型都可以调用这个方法。

// 只要原型链中包含这个原型,这个方法就返回true
console.log(Object.prototype.isPrototypeOf(instance)); // true
复制代码
  1. 关于方法

子类有时候需要覆盖父类的方法,或者增加父类没有的方法。这些方法必须在原型赋值之后再添加到原型上。

function SuperType() {
 this.property = true;
}

SuperType.prototype.getSuperValue = function() {
 return this.property;
}

function SubType() {
 this.subproperty = false;
}

// 继承SuperType
SubType.prototype = new SuperType();

// 新方法
SubType.prototype.getSubValue = function() {
 return this.subproperty;
};

// 覆盖已有的方法
SubType.prototype.getSuperValue = function() {
 return false;
};

let instance = new SubType();
console.log(instance.getSuperValue()); // false
复制代码

重点:如果以对象字面量方式创建原型方法会破坏之前的原型链,因为这相当于重写了原型链。

function SuperType() {
 this.property = true;
}

SuperType.prototype.getSuperValue = function() {
 return this.property;
};

function SubType() {
 this.subproperty = false;
};

// 继承SuperType
SubType.prototype = new SuperType();

// 通过对象字面量添加新方法,这会导致上一行无效
SubType.prototype = {
 getSubValue() {
  return this.subproperty;
 },
 someOtherMethod() {
  return false;
 }
};

let instance = new SubType();
console.log(instance.getSuperValue()); // 出错
复制代码
  1. 原型链的问题

原型中包含的引用值会在所有实例间共享,这也是为什么属性通常会在构造函数中定义而不会在原型上的原因。

在使用原型实现继承时,原型实际上变成了另一个类型的实例。(原先的实例属性变成了原型属性)

function SuperType() {
 this.colors = ["red", "blue", "green"];
}

function SubType() { }

// 继承SuperType
SubType.prototype = new SuperType();

let instance1 = new SubType();
instance1.colors.push('black');
console.log(instance1.colors); // "red,blue,green,black"

let instance2 = new SubType();
console.log(instance2.colors); // "red,blue,green,black"
复制代码

原型链的第二个问题:子类型在实例化时不能给父类型的构造函数传参。

未完结!更多内容尽情期待下一节~

【深入理解JS核心技术】欢迎各位观众老爷,求点赞,求关注,求转发~

低调务实优秀中国好青年 (简介) && 附加答案

中文 | English

一个 ☝️ 正经的前端学习 开源 仓库,启发来自  淘宝大佬  @冴羽 ,初心做一个真正能帮助到大家的仓库。一个人可以走的更快,但一群人才能走的更远。(非常口语化的,手写总结)

欢迎大家前来讨论,如果觉得对你的学习有一定的帮助,欢迎点个Star (此仓库每天都会准时更新)- vx联系: xiaoda0423

👤:我是哪吒:如果你所学的东西 处于喜欢 才会有强大的动力支撑。

地址 ⬇️

github.com/webVueBlog/…

🐤 交流讨论 && 如何学习 && 转载声明 && 帮忙修正以及补充

第一:你可以直接在本仓库阅读即可,阶段性学习。(可以转载里面的所有知识点用到任何地方,但请添加仓库的地址)有问题欢迎提交issues

🐂 阶段三十一(648)

展开查看
  • 624.220.存在重复元素III

  • 625.compare_react_life

  • 626.creat_react_app

  • 627.higher_order_fn

  • 628.jsonp

  • 629.Object.defineProperty

  • 630.react_component

  • 631.react_createRef

  • 632.react_domdiffing

  • 633.react_eventhandler

  • 634.react_life_cycle

  • 635.react_lift_process

  • 636.Route

  • 637.setTimeoutTosetInterval

  • 638.react

  • 639.code1

  • 640.code2

  • 641.code3

  • 642.code4

  • 643.code5

  • 644.code6

  • 645.code7

  • 646.code8

  • 647.code9

  • 648.code10

🐂 阶段三十(623)

展开查看
  • 599.前K个高频单词

  • 600._reverse

  • 601.dateFormat

  • 602.formatNumber

  • 603.repeat

  • 604.Text类型

  • 605.add

  • 606.argumentsNum

  • 607.asynclight

  • 608.callbacklight

  • 609.code1

  • 610.EventCenter

  • 611.expansion-operator

  • 612.extendPrototype

  • 613.fetch-async-await

  • 614.findMostWord

  • 615.likeToArr

  • 616.objectToTree

  • 617.promiseImg

  • 618.promiselight

  • 619.reduce

  • 620.react_min_setState

  • 621.react_setState

  • 622.react-props

  • 623.react-props-test

🤨 阶段二十九(598)

展开查看
  • 573.全排列II

  • 574._filter

  • 575._flat

  • 576._map

  • 577._push

  • 578.ajax

  • 579.apply

  • 580.bind

  • 581.call

  • 582.copy

  • 583.curry

  • 584.dateFormat

  • 585.debounce

  • 586.deepcopy

  • 587.flatten

  • 588.getType

  • 589.instanceof

  • 590.new

  • 591.Object.create.js

  • 592.promise-ajax

  • 593.Promise.all

  • 594.promise.js

  • 595.Promise.race

  • 596.Promise.then

  • 597.setArr

  • 598.throttle

🤨 阶段二十九(572)

展开查看
  • 566.DOM-Element类型

  • 567.42. 接雨水

  • 568.合并区间

  • 569.字符串相加

  • 570.最长递增子序列

  • 571.最长连续递增序列

  • 572.字符串相乘

😛 阶段二十八(565)

展开查看
  • 556.859. 亲密字符串

  • 557.860. 柠檬水找零

  • 558.969. 煎饼排序

  • 559.621. 任务调度器

  • 560.面试题 03.04. 化栈为队

  • 561.682. 棒球比赛

  • 562.844 比较含退格的字符串

  • 563.946. 验证栈序列

  • 564.20 有效的括号

  • 565.1021. 删除最外层的括号

😛 阶段二十七(555)

展开查看
  • 545.92. 反转链表 II

  • 546.206. 反转链表

  • 547.202. 快乐数

  • 548.142. 环形链表 II

  • 549.141. 环形链表

  • 550.Node类型-节点关系

  • 551.25. K 个一组翻转链表

  • 552.61. 旋转链表

  • 553.24 两两交换链表中的节点

  • 554.933. 最近的请求次数

  • 555.面试题 17.09. 第 k 个数

😛 阶段二十六(544)

展开查看
  • 533.23. 合并K个升序链表

  • 534.224. 基本计算器

  • 535.122. 买卖股票的最佳时机 II

  • 536.309. 最佳买卖股票时机含冷冻期

  • 537.123. 买卖股票的最佳时机 III

  • 538.188. 买卖股票的最佳时机 IV

  • 539.714. 买卖股票的最佳时机含手续费

  • 540.2226. 每个小孩最多能分到多少糖果

  • 541.139. 单词拆分

  • 542.suspense-and-lazy

  • 543.日志功能

  • 544.token

😛 阶段二十五(532)

展开查看
  • 526.2135. 统计追加字母可以获得的单词数

  • 527.1312. 让字符串成为回文串的最少插入次数

  • 528.面试题 08.09. 括号

  • 529.3. 无重复字符的最长子串

  • 530.316. 去除重复字母

  • 531.节点层级

  • 532.Node 类型

😛 阶段二十四(525)

展开查看
  • 515.剑指 Offer 38. 字符串的排列

  • 516.剑指 Offer 46. 把数字翻译成字符串

  • 517.剑指 Offer 47. 礼物的最大价值

  • 518.剑指 Offer 59 - I. 滑动窗口的最大值

  • 519.leetcode 35. 搜索插入位置

  • 520.DOM

  • 521.剑指 Offer 53 - I. 在排序数组中查找数字 I

  • 522.剑指 Offer 60. n个骰子的点数

  • 523.26. 删除有序数组中的重复项

  • 523.122. 买卖股票的最佳时机 II

  • 524.axios.all和axios.spread

  • 525.关于Axios篇

😛 阶段二十三(514)

展开查看
  • 501.剑指 Offer 07. 重建二叉树

  • 502.剑指 Offer 10- I. 斐波那契数列

  • 503.剑指 Offer 12. 矩阵中的路径

  • 504.剑指 Offer 13. 机器人的运动范围

  • 505.剑指 Offer 14- I. 剪绳子

  • 506.剑指 Offer 14- II. 剪绳子 II

  • 507.剑指 Offer 16. 数值的整数次方

  • 508.剑指 Offer 24. 反转链表

  • 509.剑指 Offer 26. 树的子结构

  • 510.剑指 Offer 32 - I. 从上到下打印二叉树

  • 511.生成器基础

  • 512.通过 yield 中断执行

  • 513.生成器作为默认迭代器

  • 514.提前终止生成器

📕 阶段二十二(500)

展开查看
  • 481.46. 全排列

  • 482.15. 三数之和

  • 483.1. 两数之和

  • 484.剑指 Offer 10- II. 青蛙跳台阶问题

  • 485.剑指 Offer 48. 最长不含重复字符的子字符串

  • 486.剑指 Offer 04. 二维数组中的查找

  • 487.34. 在排序数组中查找元素的第一个和最后一个位置

  • 488.说说你对arguments的理解,它是数组吗?

  • 489.怎样修改chrome记住密码后自动填充表单的黄色背景?

  • 490.css的属性content有什么作用呢?

  • 491.写一个获取数组的最大值、最小值的方法

  • 492.请描述css的权重计算规则

  • 493.rgba()和opacity这两个的透明效果有什么区别呢?

  • 494.meta

  • 495.写一个验证身份证号的方法

  • 496.什么是无障碍web

  • 497.写一个方法把0和1互转

  • 498.让网页的字体变得清晰,变细用CSS怎么做?

  • 499.解释下CRLF是什么?

  • 500.网页上的验证码是为了解决什么问题?

😋 阶段二十一(480)

展开查看
  • 471.Promise

  • 472.413. 等差数列划分

  • 473.377. 组合总和 Ⅳ

  • 474.312. 戳气球

  • 475.322. 零钱兑换

  • 476.64. 最小路径和

  • 477.1343. 大小为 K 且平均值大于等于阈值的子数组数目

  • 478.Promise术语

  • 479.Promise承诺状态

  • 480.Promisethen

✔ 阶段二十(470)

展开查看
  • 461.526. 优美的排列

  • 462.216. 组合总和 III

  • 463.133. 克隆图

  • 464.101. 对称二叉树

  • 465.理解迭代

  • 466.129. 求根节点到叶节点数字之和

  • 467.迭代器模式

  • 467.可迭代协议

  • 468.迭代器协议

  • 469.自定义迭代器

  • 470.提前终止迭代器

😗 阶段十九(460)

展开查看
  • 451.Object和Array复习

  • 452.定型数组,Map,Set,迭代与扩展复习

  • 453.基本引用类型复习

  • 454.402. 移掉 K 位数字

  • 455.328. 奇偶链表

  • 456.数据类型复习

  • 457.735. 行星碰撞

  • 458.239. 滑动窗口最大值

  • 459.三次握手

  • 460.四次挥手

🐉 阶段十八(450)

展开查看
  • 441.react jsx

  • 442.React 组件

  • 443.47. 全排列 II

  • 444.692. 前K个高频单词

  • 445.220. 存在重复元素 III

  • 446.let和const

  • 447.jsx是怎么变成dom的

  • 448.数组的扩展

  • 449.宏任务与微任务

  • 450.301与302

🐔 阶段十七(440)

展开查看
  • 426.说说浏览器解析CSS选择器的过程

  • 427.手动实现一个new方法

  • 428.属性data-的理解

  • 429.用过CSS预处理器

  • 430.如何快速让一个数组乱序

  • 431.form标签的enctype属性

  • 432.::before和:after中单冒号和双冒号的区别是什么 这两个伪元素有什么作用

  • 433.script script async script defer

  • 434.在页面中的应该使用奇数还是偶数的字体

  • 435.写一个判断设备来源的方法

  • 436.GBK和UTF-8

  • 437.Git的branch及工作流的理解是什么

  • 438.Symbol使用场景

  • 439.延长作用域链

  • 440.z-index的理解

🐟 阶段十六(425)

展开查看
  • 402.React安装

  • 403.npm

  • 404.文件夹结构

  • 405.指数运算符 (ES2016)

  • 406.Async/await (ES2017)

  • 407.table的作用和优缺点

  • 408.table的作用和优缺点

  • 409.在页面上实现一个圆形的可点击区域

  • 410.typeof是操作符还是函数

  • 411.use strict

  • 412.CSS sprites的原理和优缺点分别是什么

  • 413.对SVN和GIT的理解和区别

  • 414.什么是FOUC?你是如何避免FOUC的?

  • 415.margin边界叠加是什么及解决方案

  • 416.html中的置换元素和非置换元素的理解

  • 417.javascript的作用域

  • 418."attribute"和"property"有什么不同

  • 419.HTML元素的显示优先级

  • 420.要让Chrome支持小于12px的文字怎么做

  • 421.重绘和重排

  • 422.写一个方法验证是否为中文

  • 423.line-height是如何理解的

  • 424.line-input元素中readonly和disabled属性的理解

  • 425.js放在html的body和head有什么区别

🦐 阶段十五(401)

展开查看
  • 385.Vue 动态添加路由及生成菜单

  • 386.数组排序方法

  • 387.数组操作方法

  • 388.数组搜索和位置方法

  • 389.数组迭代方法

  • 390.数组归并方法

  • 391.定型数组

  • 392.ArrayBuffer

  • 393.DataView

  • 394.ArrayBuffer 视图

  • 395.迭代与扩展操作

  • 396.Map

  • 397.WeakMap

  • 398.Set

  • 399.WeakSet

  • 400.Map顺序与迭代

  • 401.选择 Object 还是 Map

🦂 阶段十四(384)

展开查看
  • 371.集合引用类型

  • 372.Object

  • 373.Array

  • 374.数组空位

  • 375.数组索引

  • 376.检测数组

  • 377.迭代器方法

  • 378.复制和填充方法

  • 379.Vue Router

  • 380.Vue Router入门

  • 381.带参数的动态路由匹配

  • 382.转换方法

  • 383.栈方法

  • 384.队列方法

😘 阶段十三(370)

展开查看
  • 341.作用域链增强

  • 342.变量声明

  • 343.垃圾回收

  • 344.标记清理

  • 345.引用计数

  • 346.性能

  • 347.内存管理

  • 348.基本引用类型

  • 349.Date

  • 350.Date继承的方法

  • 351.Date日期格式化方法

  • 352.Date组件方法

  • 353.RegExp

  • 354.RegExp实例属性

  • 355.RegExp实例方法

  • 356.RegExp构造函数属性

  • 357.RegExp模式局限

  • 358.原始值包装类型

  • 359.Boolean

  • 360.Number

  • 361.String

  • 362.字符串操作方法

  • 363.字符串包含方法

  • 364.trim

  • 365.repeat

  • 366.padStart()和 padEnd()方法

  • 367.字符串迭代与解构

  • 368.字符串模式匹配方法

  • 369.localeCompare()方法

  • 370. HTML 方法

🥰 阶段十二(340)

展开查看
  • 325.最佳实践

  • 326.typeof 操作符

  • 327.Undefined 类型

  • 328.Null 类型

  • 329.Boolean 类型

  • 330.Number 类型

  • 331.String 类型

  • 332.Symbol 类型

  • 333.Object 类型

  • 334.函数

  • 335.原始值与引用值

  • 336.动态属性

  • 337.复制值

  • 338.传递参数

  • 339.typeof 操作符

  • 340.执行上下文与作用域

  • 341.Global

  • 342.Math

😉 阶段十一(324)

展开查看
  • 307.script元素

  • 308.script元素放置位置

  • 309.推迟执行脚本

  • 310.异步执行脚本

  • 311.动态加载脚本

  • 312.可扩展超文本标记语言

  • 313.行内代码与外部文件

  • 314.文档模式

  • 315.元素

  • 316.区分大小写

  • 317.标识符

  • 318.注释

  • 319.严格模式

  • 320.语句最佳实践

  • 321.关键字与保留字

  • 322.var

  • 323.let

  • 324.const

🙃 阶段十(306)

展开查看
  • 286.HTTP工作原理

  • 287.cookie和session区别

  • 288.get和post的区别

  • 289.xss

  • 290.Symbol 语法

  • 291.响应式原理

  • 292.computed和data

  • 293.MVVM

  • 294.路由缓存

  • 295.v-model的原理

  • 296.模版引擎

  • 297.SEO优化

  • 298.重置data

  • 299.Observable

  • 300.this.parent

  • 301.data和属性名

  • 302.生命周期

  • 303.SPA单页面

  • 304.location.href

  • 305.计算属性和监听器

  • 306.v-show, v-if

😍 阶段九(285)

展开查看
  • 251.元素的alt和title有什么区别

  • 252.new

  • 253.call

  • 254.防抖

  • 255.flex

  • 256.节流

  • 257.柯里化

  • 258.promise

  • 259.字符串编号

  • 260.模拟forOf

  • 261.super原理分析

  • 262.promise的单一状态与中转

  • 263.promise.then

  • 264.then返回值的处理技巧

  • 265.promise封装ajax

  • 266.封装setTimeout定时器

  • 267.promise队列原理

  • 268.异步封装到类内部

  • 269.class和await的结合

  • 270.用reduce实现promise队列

  • 271.BFC

  • 272.重绘与重排

  • 273.动画

  • 274.inline-block

  • 275.左固定右适应

  • 276.三角形

  • 277.flex属性

  • 278.visibility

  • 279.position

  • 280.清除浮动

  • 281.弹性布局

  • 282.什么是语义化与新特性

  • 283.cookie和token

  • 284.cookie是如何工作的

  • 285.测试promise例子

🧑🏻 阶段八(250)

展开查看
  • 216.事件循环Event Loop

  • 217.知识点

  • 218.html-css

  • 219.0.1+0.2==0.3?

  • 220.ES新特性

  • 221.模块化

  • 222.JS方法源码实现

  • 223.用CSS创建一个三角形,并简述原理

  • 224.写一个去除制表符和换行符的方法

  • 225.圣杯布局和双飞翼布局的理解和区别

  • 226.iframe框架都有哪些优缺点

  • 227.BFC规范的理解

  • 228.统计某一字符或字符串在另一个字符串中出现的次数

  • 229.清除浮动的方式有哪些及优缺点

  • 230.写一个加密字符串的方法

  • 231.写一个判断数据类型的方法

  • 232.优雅降级和渐进增强

  • 233.浏览器内多个标签页之间的通信方式有哪些

  • 234.viewport常见设置都有哪些

  • 235.对比下px、em、rem有什么不同

  • 236.http都有哪些状态码

  • 237.标签语义化的理解

  • 238.css常用的布局方式有哪些

  • 239.简要描述下JS有哪些内置的对象

  • 240.浏览器内核都有哪些

  • 241.写一个获取当前url查询字符串中的参数的方法

  • 242.html5中的form怎么关闭自动完成

  • 243.什么是回调函数

  • 244.网页应用从服务器主动推送到客户端有哪些方式

  • 245.为什么HTML5只需要写就可以

  • 246.写一个数组去重的方法

  • 247.title与h1的区别、b与strong的区别、i与em的区别

  • 248.style标签写在body前和body后的区别是什么

  • 249.什么是闭包

  • 250.返回到顶部的方法有哪些

🧑🏻‍💻 阶段七(215)

展开查看
  • 191.new关键字

  • 192.call

  • 193.apply

  • 194.bind

  • 195.js

  • 196.防抖与节流

  • 197.原型链继承prototype

  • 198.使用构造函数继承call

  • 199.原型式继承Object.create.js

  • 200.寄生式继承

  • 201.寄生组合式继承

  • 202.静态方法的实现原理

  • 203.protected

  • 204.class属性继承原理

  • 205.class方法继承原理

  • 206.https加密原理

  • 207.总结原型链

  • 208.原型链实例

  • 209.call,apply借用原型链

  • 210.原型继承

  • 211.原型工厂封装

  • 212.__proto__属性访问器

  • 213.DataView视图

  • 214.TypedArray

  • 215.iterator使用场景

😇 阶段六(190)

展开查看
  • 176.事件冒泡和事件捕获到底有何区别

  • 177.用递归算法实现,数组长度为5且元素的随机数在2-32间不重复的值

  • 178.写一个方法去掉字符串中的空格

  • 179.CSS3有哪些新增的特性

  • 180.html的元素有哪些

  • 181.HTML全局属性(global attribute)有哪些

  • 182.在页面上隐藏元素的方法有哪些

  • 183.去除字符串中最后一个指定的字符

  • 184.CSS选择器有哪些?哪些属性可以继承?

  • 185.写一个方法把下划线命名转成大驼峰命名

  • 186.HTML5的文件离线储存怎么使用,工作原理是什么

  • 187.简述超链接target属性的取值和作用

  • 188.CSS3新增伪类有哪些并简要描述

  • 189.写一个把字符串大小写切换的方法

  • 190.label都有哪些作用

🧑🏻‍💻 阶段五(175)

展开查看
  • 151.数据绑定的容器更新

  • 152.理解对象

  • 153.箭头函数

  • 154.高阶函数

  • 155.静态属性的使用

  • 156.instanceof

  • 157.promise原理

  • 158.数组的扩展

  • 159.reduce

  • 160.迭代器与for of

  • 161.结构赋值

  • 162.盒模型

  • 163.权重和优先级

  • 164.Flex实现垂直居中

  • 165.一个大小为父元素宽度一半的正方形

  • 166.左右固定中间自适应

  • 167.flex左侧固定右侧自适应

  • 168.函数有多个长辈

  • 169.原型方法与对象方法优先级

  • 170.使用父类构造函数初始属性

  • 171.hasOwnProperty属性检测

  • 172.isPrototypeOf原型检测

  • 173.原型中的constructor引用

  • 174.那些对象没有原型

  • 175.instanceof

🥲 阶段四(150)

展开查看
  • 146.页面导入样式时,使用link和@import有什么区别

  • 147.什么是“use strict”,好处和坏处

  • 148.console.log(0.1 + 0.2)

  • 149.数组pop(), push(), unshift(), shift()的区别

  • 150.==和===

🧑🏻‍💻 阶段三(145)

展开查看
  • 101.闭包语义

  • 102.构造函数的作用和使用形态

  • 103.延伸函数生命周期

  • 104.传递参数

  • 105.对象的含义

  • 106.浅拷贝

  • 107.加解密

  • 108.发送消息

  • 109.深拷贝

  • 110.对象api

  • 111.计算机的组成

  • 112.进程和线程

  • 113.访问器

  • 114.代理对象

  • 115.代理函数

  • 116.原型链

  • 117.nodeEvent

  • 118.websocket

  • 119.HTTPS工作流程

  • 120.三次挥手

  • 121.缓存

  • 122.数组使用代理拦截操作

  • 123.创建对象

  • 124.解构赋值

  • 125.Object.assign

  • 126.四次挥手

  • 127.浏览器输入URL后回车

  • 128.webpack实践

  • 129.mustache

  • 130.set语法

  • 131.map语法

  • 132.箭头函数

  • 133.模板字符串

  • 134.模板字符串

  • 135.构造函数

  • 136.声明类的语法

  • 137.在类里面使用访问器

  • 138.public属性

  • 139.scoped

  • 140.keep-alive

  • 141.vue-router

  • 142.vue-loader

  • 143.修饰符

  • 144.Vue.delete

  • 145.OSI七层网络模型

🤣 阶段二(100)

展开查看
  • 51.简述Chome盒模型与IE盒模型的区别

  • 52.行内元素和块级元素都有哪一些

  • 53.BFC

  • 54.什么是弹性布局

  • 55.html5有哪些新特性

  • 56.position有哪些属性

  • 57.请说出1px,1rem,1vh,1em各自代表的含义

  • 58.什么是SPA

  • 59.简述优雅降级与渐进增强

  • 60.重绘与重排

  • 61.解释下浮动和它的工作原理和清除浮动的方法

  • 62.如何让一个盒子在页面垂直水平居中

  • 63.前端性能优化方案

  • 64.css选择器优先级顺序

  • 65.CSS3有哪些新特性

  • 66.什么是空元素

  • 67.如何实现浏览器内多个标签页之间的通讯

  • 68.为什么要初始化css样式

  • 69.CSS3新增的伪类有哪些

  • 70.说说对canvas,svg,webgl的理解

  • 71.浏览器是如何渲染UI的

  • 72.em、rem的区别

  • 73.解释csssprites,如何使用

  • 74.浏览器是如何渲染UI的

  • 75.浏览器工作原理

  • 76.伪类和伪元素的区别

  • 77.介绍一下你对浏览器内核的理解

  • 78.常见的浏览器内核有哪些

  • 79.优化这些图片的加载

  • 80.如何进行seo优化

  • 81.如何实现0.5px边框

  • 82.less和sass的区别

  • 83.xhtml和html有什么区别

  • 84.img标签上title与alt属性的区别是什么

  • 85.a标签中 active hover link visited 正确的设置顺序是什么

  • 86.如何处理HTML5新标签的浏览器兼容性问题

  • 87.HTML5的离线储存怎么使用

  • 88.页面导入样式时,使用link和@import有什么区别

  • 89.git reset、git revert和git checkout

  • 90.git pull 和 git fetch 之间有什么区别

  • 91.如何在 Git 恢复先前的提交

  • 92.使用箭头函数应注意什么

  • 93.介绍下 Set、Map的区别

  • 94.Promise构造函数是同步执行还是异步执行,那么 then 方法呢

  • 95.setTimeout、Promise、Async/Await 的区别

  • 96.下面的输出结果是多少

  • 97.请写出以下代码的答案,并解释为什么要提升

  • 98.var、let、const之间的区别

  • 99.async 和 await

  • 100.get和post的区别

🧑🏻‍💻 阶段一(50)

展开查看
  • 1.xss总结

  • 2.csrf

  • 3.html加载过程

  • 4.defer和async的区别

  • 5.输入一个url后

  • 6.浏览器线程线程模型

  • 7.浏览器缓存

  • 8.BFC

  • 9.vue-DIFF算法

  • 10.箭头函数和普通函数的区别

  • 11.vue框架好在哪里

  • 12.vue双向绑定弊端set实现

  • 13.vue-router原理

  • 14.跨域问题解决方案

  • 15.ObjectdefinePropery和proxy

  • 16.vue组件通信

  • 17.vue双向绑定

  • 18.三次握手和四次挥手

  • 19.Axios

  • 20.跨域

  • 21.websocket

  • 22.osi七层模型

  • 23.模块加载方案

  • 24.隐式类型转换

  • 25.单向数据流与双向数据绑定

  • 26.项目难点

  • 27.EventBus订阅发布模式

  • 28.http请求头

  • 29.TCP

  • 30.vue-router原理2

  • 31.清除浮动的方式

  • 32.发布订阅模式

  • 41.闭包和作用域链

  • 42.前端性能优化

  • 43.模块化

  • 44.http各版本

  • 45.commonjs和es6

  • 46.BFC

  • 47.左侧固定右侧自适应

  • 48.三角形

  • 49.vuex核心原理

  • 50.圣杯布局

全栈架构师

展开查看
  • 33.vue源码解读

  • 34.webpack原理剖析

  • 35.vue-router前端路由原理剖析

  • 36.React16虚拟dom原理剖析

  • 37.koa2源码剖析

  • 38.Flutter

  • 39.vue组件设计

  • 40.Taro框架

深入理解JS核心技术

NumberTitle
1在 JavaScript 中创建对象的可能方式有哪些
2什么是原型链
3调用、应用和绑定有什么区别
4什么是 JSON 及其常用操作
5数组切片方法的目的是什么
6数组拼接方法的目的是什么
7切片和拼接有什么区别
8你如何比较对象和地图
9== 和 === 运算符有什么区别
10什么是 lambda 或箭头函数
11什么是一级函数
12什么是一阶函数
13什么是高阶函数
14什么是一元函数
15什么是柯里化函数
16什么是纯函数
17let 关键字的作用是什么
18let 和 var 有什么区别
19选择名称let作为关键字的原因是什么
20如何在 switch 块中重新声明变量而不会出错
21什么是时间死区
22什么是 IIFE(立即调用函数表达式)
23您如何在 JavaScript 中解码或编码 URL
24什么是备忘
25什么是吊装
26ES6 中的类是什么
27什么是闭包
28什么是模块
29为什么需要模块
30javascript中的作用域是什么
31什么是服务人员
32如何使用 service worker 操作 DOM
33如何在 service worker 重启时重用信息
34什么是索引数据库
35什么是网络存储
36什么是发布消息
37什么是饼干
38为什么需要 Cookie
39cookie 中有哪些选项
40如何删除 cookie
41cookie、本地存储和会话存储有什么区别
42localStorage 和 sessionStorage 的主要区别是什么
43您如何访问网络存储
44会话存储上可用的方法有哪些
45什么是存储事件及其事件处理程序
46为什么需要网络存储
47你如何检查网络存储浏览器支持
48你如何检查网络工作者浏览器支持
49举个 web worker 的例子
50webworkers对DOM有什么限制
51什么是承诺
52为什么需要承诺
53承诺的三种状态是什么
54什么是回调函数
55为什么我们需要回调
56什么是回调地狱
57什么是服务器发送事件
58您如何接收服务器发送的事件通知
59如何检查浏览器对服务器发送事件的支持
60服务器发送的事件有哪些可用的事件
61承诺的主要规则是什么
62什么是回调中的回调
63什么是承诺链
64什么是promise.all
65承诺中比赛方法的目的是什么
66什么是javascript中的严格模式
67为什么需要严格模式
68你如何声明严格模式
69双感叹号的目的是什么
70删除运算符的目的是什么
71什么是 typeof 运算符
72什么是未定义属性
73什么是空值
74null 和 undefined 有什么区别
75什么是评估
76窗口和文档有什么区别
77你如何在javascript中访问历史记录
78你如何检测大写锁定键是否打开
79什么是 NaN
80未声明变量和未定义变量有什么区别
81什么是全局变量
82全局变量有什么问题
83什么是 NaN 属性
84isFinite 函数的目的是什么
85什么是事件流
86什么是事件冒泡
87什么是事件捕获
88如何使用 JavaScript 提交表单
89您如何找到操作系统详细信息
90文档加载和 DOMContentLoaded 事件有什么区别
91本机,主机和用户对象之间有什么区别
92用于调试 JavaScript 代码的工具或技术有哪些
93与回调相比,promise 的优缺点是什么
94属性和属性有什么区别
95什么是同源策略
96void 0的目的是什么
97JavaScript 是编译型语言还是解释型语言
98JavaScript 是区分大小写的语言吗
99Java和JavaScript之间有什么关系吗
100什么是事件
101谁创建了 JavaScript
102preventDefault 方法有什么用
103stopPropagation 方法有什么用
104return false 涉及哪些步骤
105什么是物料清单
106setTimeout 有什么用
107setInterval 有什么用
108为什么 JavaScript 被视为单线程
109什么是事件委托
110什么是 ECMAScript
  • shields.io/

  • leetcode

👩🏻‍💻:webVueBlog的leetcode刷题📒

  f0303ad2790167a0c326134999bb0ffe.png  5db9b067de89289a812e1ad0822ed41c.png    e6f04f9688881ad85bbf619ec6753110.png

  1. Number题号

  2. Title题目

  3. Difficulty难度

  4. Navigation解答

NumberTitleDifficultyNavigation
1.两数之和d37fc60f391a5a1689b4c5a9f3924c27.png两数之和
2.两数相加4fefd99ac0e728b3807ed03d26a8a46d.png两数相加
3.无重复字符的最长子串47b1b03d79cc235c8ffc09506966d85b.png无重复字符的最长子串

以 「早起」、「运动」、「冥想」、「写作」、「阅读」这五件能够快速改变人生的事情为切入点,帮助大家建立良好的生活习惯,技术的成长绝不是一朝一夕,良好的习惯将会帮助我们更快的进步,但在技术之外,我更希望大家能在这些事情的坚持中,收获一份自信,多一份底气,对人生多一份积极。--- (来源:低调务实优秀中国好青年群)

License

0bc6eeb4a68dcba06562353880093588.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值