## **原型**
我们创建的每个函数都有一个 prototype(原型)属性,这个属性是一个指针,指向一个对象, 使用原型对象的好处是可以 让所有对象实例共享它所包含的属性和方法。换句话说,不必在构造函数中定义对象实例的信息,而是 可以将这些信息直接添加到原型对象中,如下面的例子所示 :
~~~
function Person() {
}
Person.prototype.name = '小四'
Person.prototype.age = 24
Person.prototype.sayName = function () {
console.log(this.name)
}
var person1 = new Person()
person1.sayName() // 小四
var person2 = new Person()
person2.sayName() // 小四
console.log(person1.sayName === person2.sayName); //true
~~~
> 在此,我们将 sayName()方法和所有属性直接添加到了 Person 的 prototype 属性中,构造函数 变成了空函数。即使如此,也仍然可以通过调用构造函数来创建新对象,而且新对象还会具有相同的属 性和方法。但与构造函数模式不同的是,新对象的这些属性和方法是由所有实例共享的。换句话说, person1 和 person2 访问的都是同一组属性和同一个 sayName()函数。
> 原型:去改写对象下面公用的方法或属性,让同样公用的东西在内存当中只存在一份,好处就是提高性能。比较抽象。
学习方法:把原型看做css中的class,普通方法看做css中的style。
style和class比较:
style优先级高于class
style样式没有办法复用
#### **原型改写示例**
```
var arr = [1,2,3,4,5];
var arr1 = [11,21,31,41,51];
Array.prototype.sum = function () {
var result = 0;
for (var i=0;i<this.length;i++) {
result+=this[i];
}
return result;
}
console.log(arr.sum());
console.log(arr1.sum());
```
### **理解原型对象**
- 无论什么时候,只要创建了一个新函数,就会根据一组特定的规则为该函数创建一个 prototype 属性,这个属性指向函数的原型对象。在默认情况下,所有原型对象都会自动获得一个 constructor (构造函数)属性,这个属性包含一个指向 prototype 属性所在函数的指针。就拿前面的例子来说, Person.prototype. constructor 指向 Person。而通过这个构造函数,我们还可继续为原型对象 添加其他属性和方法。
- 创建了自定义的构造函数之后,其原型对象默认只会取得 constructor 属性;至于其他方法,则 都是从 Object 继承而来的。当调用构造函数创建一个新实例后,该实例的内部将包含一个指针(内部 属性),指向构造函数的原型对象,就是__proto__(隐式原型对应图中的[[ Prototype ]]);
![](https://i.vgy.me/0QmAK2.png)
> 这幅图展示了 Person 构造函数、Person 的原型属性以及 Person 现有的两个实例之间的关系。 在此,Person.prototype指向了原型对象,而Person.prototype.constructor又指回了Person。 原型对象中除了包含 constructor 属性之外,还包括后来添加的其他属性。Person 的每个实例—— person1 和 person2 都包含一个内部属性,该属性仅仅指向了 Person.prototype;换句话说,它们 与构造函数没有直接的关系。此外,要格外注意的是,虽然这两个实例都不包含属性和方法,但我们却
可以调用 person1.sayName()。这是通过查找对象属性的过程来实现的。
~~~
console.log(person1.__proto__ === Person.prototype) // true
~~~
> 每当代码读取某个对象的某个属性时,都会执行一次搜索,目标是具有给定名字的属性。搜索首先 从对象实例本身开始。如果在实例中找到了具有给定名字的属性,则返回该属性的值;如果没有找到, 则继续搜索指针指向的原型对象,在原型对象中查找具有给定名字的属性。如果在原型对象中找到了这 个属性,则返回该属性的值。也就是说,在我们调用 person1.sayName()的时候,会先后执行两次搜 索。首先,解析器会问:“实例 person1 有 sayName 属性吗?”答:“没有。”然后,它继续搜索,再 问:“person1 的原型有 sayName 属性吗?”答:“有。”于是,它就读取那个保存在原型对象中的函 数。当我们调用 person2.sayName()时,将会重现相同的搜索过程,得到相同的结果。而这正是多个 对象实例共享原型所保存的属性和方法的基本原理。
### **重写原型中的值**
虽然可以通过对象实例访问保存在原型中的值,但却不能通过对象实例重写原型中的值。如果我们 在实例中添加了一个属性,而该属性与实例原型中的一个属性同名,那我们就在实例中创建该属性,该 属性将会屏蔽原型中的那个属性。来看下面的例子。
~~~
function Person() {
}
Person.prototype.name = '小四'
Person.prototype.age = 24
Person.prototype.job = "Software Engineer"
Person.prototype.sayName = function () {
console.log(this.name)
}
var person1 = new Person()
var person2 = new Person()
person1.name = "猪八戒";
console.log(person1.name); //"猪八戒"——来自实例
console.log(person2.name); //"小四"——来自原型
~~~
在这个例子中,person1 的 name 被一个新值给屏蔽了。但无论访问[person1.name](http://person1.name/)还是访问[person2.name](http://person2.name/)都能够正常地返回值,即分别是"猪八戒"(来自对象实例)和"小四"(来自原型)。 当在 console.log()中访问[person1.name](http://person1.name/)时,需要读取它的值,因此就会在这个实例上搜索一个名为 name 的属性。这个属性确实存在,于是就返回它的值而不必再搜索原型了。当以同样的方式访问 person2. name 时,并没有在实例上发现该属性,因此就会继续搜索原型,结果在那里找到了 name 属性。 当为对象实例添加一个属性时,这个属性就会屏蔽原型对象中保存的同名属性;换句话说,添加这 个属性只会阻止我们访问原型中的那个属性,但不会修改那个属性。即使将这个属性设置为 null,也 只会在实例中设置这个属性,而不会恢复其指向原型的连接。不过,使用 delete 操作符则可以完全删 除实例属性,从而让我们能够重新访问原型中的属性,如下所示。
~~~
function Person() {
}
Person.prototype.name = '小四'
Person.prototype.age = 24
Person.prototype.job = "Software Engineer"
Person.prototype.sayName = function () {
console.log(this.name)
}
var person1 = new Person()
var person2 = new Person()
person1.name = "猪八戒";
console.log(person1.name); //"猪八戒"——来自实例
console.log(person2.name); //"小四"——来自原型
delete person1.name;
console.log(person1.name); // 小四 --- 来自原型
~~~
> 在这个修改后的例子中,我们使用 delete 操作符删除了[person1.name](http://person1.name/),之前它保存的"小四" 值屏蔽了同名的原型属性。把它删除以后,就恢复了对原型中 name 属性的连接。因此,接下来再调用[person1.name](http://person1.name/)时,返回的就是原型中 name 属性的值了。
#### **提问一下,看看有没有睡觉的**
```
var arr = [];
arr.number = 10;
Array.prototype.number = 20;
console.log(arr.number); // 10 普通方法优先级高于原型方法
```
> 解读:首先解析器会问:“实例arr上有number属性吗?” 答:“有”,那么就停止查找,,因为实例比构造函数优先级高。
- 公告
- HTML
- 1、什么是盒模型
- 2、行内、块元素、空元素分别举例
- 3、src和href的区别
- 4、html5为什么只需要写<!
- 5、link和@import的区别
- 6、Doctype作用,标准模式与兼容模式有什么区别
- 7、至少用两种方法写两列布局,左列定宽200px,右侧自适应
- 8、写出HTML5新增的语义化标签
- 9、前端页面由那三层构成,分别是什么,作用是什么
- 10、请描述一下cookies,sessionStorage和localStorage的区别
- 11、Sass 、S LESS 是什么?大家为什么要使用他们
- 12、css 优先级算法如何计算?
- 13、javascript的 typeof 返回哪些数据类型
- 14、例举 3 种强制类型转换和 2 种隐式类型转换
- 15、数组方法 pop() push() unshift() shift()
- 16、window.onload 和 document ready 的区别
- 17、”==”和“===”的不同
- 18、iframe的作用
- 19、png、jpg、gif 这些图片格式解释一下,分别什么时候用。有没有了解过webp?
- 20、style标签写在body后与body前有什么区别
- 21、在网页中的应该使用奇数还是偶数的字体?为什么呢
- CSS
- 1、未知宽高垂直水平居中
- 2、都知道哪些CSS Hack
- 3、简述优雅降级和渐进增强
- 4、box-sizing常用的属性及分别有什么用
- 5、postion有几种取值?每种取值相对于谁来进行定位
- 6、CSS选择器有哪些?哪些属性可以继承?
- 7、移动端分辨率适配
- 8、PC常见兼容问题
- 9、display:none和visibility:hidden的区别
- 10、浏览器中的回流和重绘是什么,分别在什么情况下触发
- 11、分析代码结果
- 12、px、em、rem的区别
- 13、清除浮动的方式有哪些,比较好的是哪种
- 14、简述 readyonly 与 disabled 的区别
- 15、有下面这样一段 HTML 结构,使用 css 实现这样的效果
- 16、你做的页面在哪些流览器测试过?这些浏览器的内核分别是什么?
- 17、为什么要初始化样式
- 18、Doctype 的作用?严格模式与混杂模式的区别?
- 19、浏览器的内核分别是什么?经常遇到的浏览器的兼容性有哪些?原因,解决 方法是什么,常用 hack 的技巧 ?
- 20、哪些 css 属性可以继承
- 21、css 优先级算法如何计算?
- 22、CSS3 有哪些新特性?
- 23、html5 有哪些新特性、移除了那些元素?如何处理 HTML5 新标签的浏览器兼 容问题?如何区分 HTML 和 HTML5?
- 24、CSS3 新增伪类有那些?
- 25、rgba()和opacity的透明效果有什么区别
- 26、知道css有个content属性吗?有什么用?有什么应用?
- 27、页面导入样式时,使用link和@import有什么区别
- 28、介绍以下你对浏览器内核的理解
- 29、CSS3新增的特性
- 30、解释css sprites,如何使用?
- 31、用纯css创建一个三角形的原理是什么?
- 32、一个满屏品字布局如何设计
- 33、CSS属性overflow属性定义溢出元素内容区的内容会如何处理
- 34、请解释一下CSS3的flexbox(弹性盒布局模型),以及适用场景
- 35、浏览器是怎样解析CSS选择器的
- 36、PC常见兼容问题汇总
- JS
- 1、getAttribute
- css
- 1、IE6双倍边距bug
- 2、IE6中图片链接的下方有间隙
- 3、IE6下空元素的高度BUG
- 4、不同浏览器的标签默认的margin和padding不一样
- 5、渐进识别的方式
- 37、绝对定位和相对定位区别
- 38、position跟display、overflow、float这些特性相互叠加后会怎么样?
- 39、上下margin重合的问题
- 40、设置元素浮动后,该元素的display值是多少
- 41、::before 和 :after中双冒号和单冒号有什么区别?解释一下这2个伪元素的作用
- 42、 li与li之间有看不见的空白间隔是什么原因引起的?有什么解决办法?
- 43、实现三栏布局
- 44、rem原理
- JavaScript1.0
- 1、简述同步和异步的区别
- javascript异步的几种实现方式
- 2、怎样添加、移除、复制、创建、查找节点
- 3、实现一个函数clone
- 4、数组去重
- 5、在JavaScript中什么是伪数组?如何将伪数组转化为标准数组
- 6、JavaScript中callee和caller的作用
- 7、简述cookie、sessionStorage、localStorage的区别
- 8、jQuery的事件委托on、live、delegate之间有什么区别
- 9、如何理解闭包,有何作用,使用场景
- 10、跨域请求资源的方式有哪些
- 11、谈谈垃圾回收机制
- 12、描述一次完整的http请求过程
- 13、http状态码有哪些
- 14、如何优化图像,图像格式的区别
- 15、浏览器是如何渲染页面的
- 16、写一个function,清除字符串前后的空格
- 17、正则
- 验证邮箱
- 按照规则编写正则
- 《正则》写出正确的正则表达式匹配固话号,区号 3-4 位,第一位为 0,中 横线,7-8 位数字,中横线,3-4 位分机号格式的固话号
- 最短 6 位数,最长 20 位,阿拉伯数和英文字母 (不区分大小写)组成
- 18、改变this的方式有哪些,实现一个bind
- 19、移动端点击事件延迟300ms,原因是什么,如何解决
- 20、运行题 ※
- 21、选择题 ※
- 22、封装一个函数,参数是定时器的时间,.then执行回调函数
- 23、请尽可能详尽的解释ajax的工作原理,以及跨域
- 24、alert(undefined == null)弹出什么
- 25、typeof和instanceof相同点与不同点
- 26、JavaScript中如何检测一个变量是String类型,写出具体实现函数
- 27、JavaScript实现二分法查找
- 28、"aaaasdserdsfssa"中出现次数最多的字符及个数
- 29、谈谈你所了解的Web攻击技术
- 30、描述DOM事件代理(委托)的原理
- 31、使用代码实现,原型继承
- 32、写出五个以上常用JavaScript modules(库或包)
- 33、思考中奖概率问题如何用代码实现,A中奖概率10%,B中奖概率20%,C中奖概率30%
- 34、JS的继承相关
- 35、如何解决回调地狱
- 36、移动端常见问题
- 37、IOS和安卓常见兼容问题
- 38、一个长度不超5位的正整数转换成对应的中文字符串,例如:20876 返回 “两万零八百七十六”(JS编写)
- 39、第一个人10岁,第二个比第一个大2岁,依次递推,请用递归编写一个方法,可以计算出第8个人多大?(JS编写)
- 40、JavaScript获取网页传输过来的参数name和sex的值(http://www.wyunfei.com?name=小四&sex=男)
- 41、Common、AMD、CMD的区别
- 42、正则,把一个字符串转为驼峰
- 43、call、apply、bind方法的作用分别是什么?有什么区别?
- 44、JavaScript数据类型
- 45、线程与进程的区别
- 46、哪些常见操作会造成内存泄漏
- 47、你知道哪些项目优化方法
- 48、json的了解
- 49、new操作符具体干了什么
- 50、null和undefined的区别
- 51、eval是做什么的
- 52、构造函数Fn原型对象、实例对象、三者之间的区别
- 53、浏览器的同源策略
- 54、JavaScript 是一门什么样的语言,它有哪些特点
- 55、编程算法题※
- 56、window.location.search() 返回的是什么
- 57、window.location.reload() 作用
- 58、例举 3 种强制类型转换和 2 种隐式类型转换
- 59、列举浏览器对象模型 BOM 里常用的至少 4 个对象,并列举 window 对象的常 用方法至少 5 个
- 60、简述创建函数的几种方式
- 61、iframe 的优缺点
- 62、请你谈谈 Cookie 的弊端
- 63、哪些操作会造成内存泄漏
- 64、事件委托是什么
- 65、解释 jsonp 的原理,以及为什么不是真正的 ajax
- 66、为什么不能定义 1px 左右的 div 容器
- 67、bind(), live(), delegate()的区别
- 68、你如何优化自己的代码
- 69、请尽可能详尽的解释 ajax 的工作原理
- 70、什么是三元表达式?“三元”表示什么意思?
- 71、JavaScript 的循环语句有哪些
- 72、列出 3 条以上 ff 和 IE 的脚本兼容问题
- 73、写一个函数可以计算 sum(5,0,-5);输出 0; sum(1,2,3,4);输出 10;
- 74、JQuery 一个对象可以同时绑定多个事件,这是如何实现的?
- 75、原生 JS 的 window.onload 与 Jquery 的$(document).ready(function(){}) 有什么不同?如何用原生 JS 实现 Jq 的 ready 方法?
- 76、请实现如下功能
- 77、eval 是做什么的?
- 78、javascript 代码中的"use strict";是什么意思 ? 使用它区别是什么?
- 79、如何判断一个对象是否属于某个类?
- 80、new 操作符具体干了什么呢
- 81、视差滚动效果
- 82、谈谈模块化开发
- 83、如何合并两个对象
- 84、页面初始化的时候,需要连续调用多个接口,该怎么办?
- 85、深拷贝浅拷贝
- 86、什么是防抖和节流?有什么区别?如何实现?
- 87、函数柯里化
- 88、作用域链
- 89、原型链的继承机制
- 90、$(window).load和$(window).ready的区别
- 91、微任务和宏任务
- 92、EventLoop
- 93、原型
- 94、JS单线程该多线程
- 95、this指向
- ECMAScript6
- 1、var、let、const区别
- 2、解构赋值
- 3、Promise 详解
- 浏览器
- 输入url敲回车发生了什么
- 浏览器渲染机制、渲染引擎及JS引擎
- 浏览器缓存机制
- 兼容问题 - PC
- ajax
- 1、Ajax 是什么? 如何创建一个 Ajax?
- 2、同步和异步的区别?
- 3、如何解决跨域问题?
- 4、页面编码和被请求的资源编码如果不一致如何处理?
- 5、简述 ajax 的过程
- 6、阐述一下异步加载
- 7、GET 和 POST 的区别,何时使用 POST?
- 8、ajax 是什么?ajax 的交互模型?同步和异步的区别?如何解决跨域问题?
- 9、Ajax 的最大的特点是什么
- 10、ajax 的缺点
- 11、ajax 请求的时候 get 和 post 方式的区别
- 12、解释 jsonp 的原理,以及为什么不是真正的 ajax
- 13、什么是 Ajax 和 JSON,它们的优缺点
- 14、http 常见的状态码有那些?分别代表是什么意思?
- 15、axios
- Vue
- 1、对MVC 、MVVM、MVP的理解
- 2、v-if、v-show区别
- 3、组件通信
- 4、组件生命周期
- 5、分别简述computed和watch的使用场景
- 6、项目构建中,如何提取公共资源
- 7、简述Vuex工作流程
- 8、Vue-router传参及区别
- 9、v-on可以监听多个方法吗
- 10、$nextTick的使用
- 11、vue组件中data为什么必须是一个函数
- 12、vue事件对象的使用
- 13、vue-router响应路由参数的变化
- 14、vue-router导航守卫(钩子函数)
- 15、vue-router传参
- 16、vue-router的两种模式
- 17、vue-router路由模式为history,导致的问题
- 18、keep-alive组件的作用
- 19、渐进式框架的理解
- 20、详述虚拟DOM中的diff算法
- 21、Vue中双向数据绑定是如何实现的
- 22、Vuex中如何异步修改状态
- 23、单页面应用和多页面应用区别及优缺点
- 24、vue中过滤器有什么作用
- 25、v-if和v-for的优先级
- 26、vue中key值得作用
- 27、vue提供了几种脚手架模板
- 28、assets和static的区别
- 29、常见的几种MVVM的实现方式
- 30、组件样式属性 scoped 问题及解决方法
- 31、列举常用的指令
- 32、vue常用的修饰符
- 33、vue事件中如何使用event对象?
- 34、数组更新检测
- 35、对象更新检测
- 36、自定义指令详解
- 37、自定义过滤器详解
- 38、$route和$router的区别
- 39、Vue两个核心点
- 40、Vue计算属性computed
- 41、computed和methods区别
- 42、watch监听详解
- 43、computed和watch区别
- 44、vue和jQuery的区别
- 45、组件第一次加载会触发那几个钩子(生命周期函数)
- 46、vue-loader是什么?用途有哪些?
- 47、Vuex中actions和mutations的区别
- 48、v-model是什么
- 49、ajax请求应该写在组件的created中还是vuex的actions中
- 50、vue.cli项目中src目录每个文件夹和文件的用法
- 51、active-class 是哪个组件的属性?嵌套路由怎么定义
- 52、vue-router 是什么?它有哪些组件
- 53、不用 vuex 会带来什么问题
- 54、hash模式和history模式的实现
- 55、引入组件的步骤
- 56、Vue-cli打包命令是什么?打包后悔导致路径问题,应该在哪里修改
- 57、开发中遇到的问题
- 58、三大框架的对比
- 59、简述Vue响应式原理
- 60、跨组件双向数据绑定
- 61、delete和Vue.delete删除数组的区别
- 62、SPA首屏加载慢如何解决
- 63、Vue-router跳转和location.href有什么区别
- 64、SPA改为MPA
- 65、Vue中的slot是什么
- 66、你们vue项目是打包了一个js文件,一个css文件,还是有多个文件
- 67、vue的双向绑定的原理,和angular的对比
- 68、Vue2中注册在router-link上事件无效解决方法
- 69、<router-link>在IE与火狐上点击失效(路由不跳转)问题
- 70、Vue中跨域
- 71、axios post请求问题
- 72、SPA 路由history模式上线后刷新404
- 73、Vue路由的实现原理
- 74、swiper获取数据、css都没有问题,但是图片不动
- 75、Vue-router懒加载
- 76、子组件能不能修改父组件传递过来的数据
- 人力资源
- 1、对前端工程师你是如何理解的
- 2、你怎样看待加班
- 3、离职原因
- 4、说说你的职业规划
- 5、你对我们公司了解多少
- 6、你为什么选择我们公司
- 7、你能为我们公司带来什么
- 8、认为自己的最大的优缺点是什么
- 9、谈谈你对跳槽的看法
- 10、怎么理解你应聘的岗位
- 11、你找工作首要考虑的因素是什么
- 12、上家公司的组织架构
- 13、谈谈你对薪资的要求
- 14、你经常逛的博客及公众号等
- 15、你的业余爱好
- 16、你有什么要问我的吗
- 17、如果你未被我们录用,你怎么打算
- 18、最能概括你自己的三个词是什么
- 19、说说你对行业、技术发展趋势的看法
- 20、就你申请的这个职位,你认为你还欠缺什么
- 21、你怎样对待自己的失敗
- 22、什么会让你有成就感
- 23、你和别人发生过争执吗?你是怎样解决的
- 24、家庭情况介绍
- 25、你在上家单位主要负责什么
- 26、你愿意接受背景调查吗
- 27、你朋友对你的评价
- 28、如果通过这次面试我们单位录用了你,但工作一段时间却发现你根本不适合这个职位,你怎么办
- 29、在完成某项工作时,你认为领导要求的方式不是最好的,自己还有更好的方法,你应该怎么做
- 30、如果你的工作出现失误,给本公司造成经济损失,你认为该怎么办
- 31、如果你做的一项工作受到上级领导的表扬,但你主管领导却说是他做的,你该怎样
- 32、工作中你难以和同事、上司相处,你该怎么办
- 33、假设你在某单位工作,成绩比较突出,得到领导的肯定。但同时你发现同事们越来越孤立你,你怎么看这个问题?你准备怎么办
- 34、为什么喜欢前端?
- 35、请你自我介绍
- 36、你新到一个部门,一天一个客户来找你解决问题,你努力想让他满意,可是始终达不到群众得满意,他投诉你们部门工作效率低,你这个时候怎么作
- 37、在工作中遇到的问题及解决方案
- 38、何时可以到岗
- 39、谈谈你对工作的期望与目标
- 40、你更喜欢和哪种性格的人共事
- 41、如果你是老板,最不喜欢哪种类型的员工
- 42、怎样和上级沟通
- 43、面试中,大脑出现短路怎么办
- 44、近期和长期的规划是什么
- 项目实战
- B2C商城API
- 后台
- 用户接口
- 管路员登录
- 用户列表
- 退出
- 订单接口
- 订单列表
- 订单详情
- 订单查询
- 分类接口
- 分类列表
- 分类添加
- 分类编辑
- 统计接口
- 产品接口
- 产品列表
- 产品搜索
- 产品上下架
- 添加商品
- 图片上传
- 富文本图片上传
- 富文本编辑器
- 商品详情
- 产品保存&更新
- 前台
- 产品
- 产品列表&排序
- 产品详情
- 用户
- 大众点评
- 商铺列表
- 商铺详情
- 添加收藏
- 收藏列表
- 删除收藏
- 检测是否收藏
- 登录
- Vue
- 开发前必读
- 主题
- 收藏
- 用户相关
- 评论
- 消息
- 其它功能
- 公司中的那些事儿
- 工作流程
- 上线流程
- 知识点解析
- 第一节:布局
- 第二节:盒模型&BFC
- 第三节:DOM事件
- 第四节:HTTP协议
- 第五节:原型链
- 第六节:继承
- 移动端
- 1、点透
- 2、1px问题
- 3、图片在安卓上,有些设备会模糊
- 4、防止手机中页面放大和缩小
- 5、上下拉动滚动条时卡顿、慢
- 6、iphone及ipad下输入框默认内阴影
- 7、webkit mask兼容处理
- 8、click的300ms延迟问题
- 9、移动端和PC端有什么区别?
- 10、固定定位布局 键盘挡住输入框内容
- 11、移动端是如何调试的
- hybird
- 历届面试真题
- 1807
- 面试题解
- webSocket
- 微信支付流程详解及源码 - 前端
- 微信分享流程详解及源码 - 前端
- 前后端协作及综合问题
- 1、跨域
- 2、前后端交互 - 传参
- 面向对象
- 1、普通方法
- 2、工厂方式
- 3、构造函数
- 4、原型
- 5、通过原型实现customPush方法
- 6、原型链
- 7、面试题
- 1、构造函数(废弃)
- 2、原型(废弃)
- 3、原型链 - 面试题链接
- 8、继承 - ES5
- 9、继承 - ES6
- 前端安全
- 1、XSS攻击
- 2、CSRF
- 3、HTTP和HTTPs
- 后台管理系统介绍及权限管理
- webpack
- 1、首屏加速 - CDN
- 2、首屏加速 - 懒加载
- 3、首屏加速 - 按需加载
- 4、搭建测试(test)&预发(pre)环境
- 项目中的鉴权是如何实现的?
- 前端优化
- 1、你的前端性能还能再抢救一下
- 2、解读雅虎35条军规(上)
- 3、解读雅虎35条军规(下)
- 4、你要不要看这些优化指标?
- 5、性能优化百宝箱(上)
- 6、性能优化百宝箱(下)
- 7、聊聊 DNS Prefetch
- 8、Webpack 性能优化两三事
- 9、图片加载优化(上)
- 10、图片加载优化(下)
- 安卓、IOS兼容性
- 真机调试
- 随堂笔记
- 1902B
- Vue2.0 - 课堂笔记&源码
- 实训
- 周考题
- 面试题
- 前端面试体系核心攻略
- 1. 前端面试的知识体系