- html基础
- 何时引用js
- src href
- src
- 请求src资源会阻塞
- href
- 并行下载
- src
- src href
- 如何引入js
- script标签
- 动态创建script标签
- center标签居中
- 何时引用js
进程
- 进程状态
- 创建
- 就绪
- 等待处理机
- 运行
- 运行
- 阻塞
- 终止
- 阻塞
- 等待输入输出
- 就绪
- 终止
html5
- HTML5 新特性
- Canvas
- Geolocation
- Audio Video
- localStorage sessionStorage
- webworker websocket
- header nav footer aside article section
css3
html5 input
单例模式
单例模式
Java中的单例
饿汉
1 | public class Single { |
懒汉
1 | private static Single instance= null; |
懒汉线程安全
1 | public static synchronized Single getInstance() { |
双检验
1 | public static Single getInstance() { |
登记静态
1 | private static class SingleHolder { |
枚举
1 |
|
JavaScript中的单例
闭包实现单例
1 |
|
正常单例
1 | let A = function () { |
跨域资源共享
跨域资源共享
通过xhr实现ajax通信的主要限制来源于跨域安全策略。默认情况下xhr对象只能访问与包含他的页面位于同一域中的资源。
同域名,同端口,同协议
CORS - Cross-Origin Resource Sharing
基本思想
使用自定义的http头让浏览器与服务器进行沟通,从而决定请求或响应应该是成功还是失败。
在发送http请求时,附加一个额外的头部
1 | Origin: http:www.kfdykme.xyz |
如果服务器认为请求可以接受,就在Access-Control-Allow-Origin头部中回发相同的源信息
如果是公共资源,可以回发*
1 | Access-Control-Allow-Origin: http:www.kfdykme.xyz |
如何没有该头信息或者不匹配,则浏览器驳回请求
对CORS的实现
通过XMLHTTPRequest对象实现对CORS的原生支持。
跨域xhr的限制
- 不能使用setRequestHeader设置自定义头部
- 不能发送和接受cookie
- 调用getAllResponseHeaders()方法返回空字符串
Prefighted Requests
带凭据的请求
Access-Control-Allow-Credentials: true
其他跨域技术
图像ping
1 | var img = new Image(); |
JSONP
动态script标、
Comet
长轮训
短轮训8
服务器发送事件
Web Socket
总结自 JavaScript高级程序设计
vue中的面向对象
JavaScript-继承
JavaScript 继承
原型链
实现原型链
1 | function SuperType() { |
当前的原型链
SubType.prototype 指向SubType Prototype
SubType Prototype.prototype 指向 SuperType Prototype
SubType -> SuperType => Object
给原型添加方法的代码一定要放在替换原型的语句之后
原型链的引用类型问题
创建子类型的实例时,不能向超类的构造函数传参
借用构造函数
解决原型中包含引用类型的问题
1 | function SuperType () { |
可以传参
但是也无法避免构造函数的问题:方法都在构造函数中声明,无法复用
组合继承
1 | function SuperType(name) { |
原型式继承
1 | function object(o) { |
ECMAScript5 通过新增Object.create()方法规范了原型式继承
1 | var person = { |
引用类型会有影响
寄生式继承
1 | function createAnother(original) { |
寄生组合继承
1 | function inheritPrototype(subType, superType) { |
总结自 JavaScript高级程序设计
JavaScript-对象
JavaScript
- 属性类型
- 数据属性
- 访问器属性
- 创建对象
- 工厂模式
- 构造函数模式
- 原型模式
- 组合构造函数和原型模式
- 动态构造函数模式
- 寄生构造函数模式
- 问题构造函数模式
JavaScript 属性
JavaScript 创建对象
工厂模式
1 | function createPerson (name, age, job) { |
构造函数模式
1 | function Person (name, age, job) { |
要创建Person的新实例,必须使用new操作符.实际上经历了:
- 创建一个对象
- 将构造函数的作用于赋值给新对象
- 执行构造函数中的代码
- 返回新对象
构造函数与其他函数的唯一区别,就在于调用方式不同。任何函数,只要通过new操作符来调用,那他就可以作为构造函数
1 | // 作为构造函数使用 |
构造函数的不同实例中的同名方法是不相等的
1 | function Person (name, age, job) { |
可以通过将方法定义在构造函数外部解决,但是也会引发新的问题,构造函数失去了封装性
1 | function Person (name, age, job) { |
原型模式
1 | function Person() {} |
1 | function Persone() { |
原型的动态性
先创建实例,再重写原型则会导致error
原生对象原型
1 | String.prototype.startsWith = function (text) { |
原型对象问题
当涉及到原型中的属性是引用类型的属性时,会产生问题。
组合使用构造函数模式和原型模式
- 构造函数用于定义实例属性
- 原型模式用于定义方法和共享的属性
1 | function Person (name, age, job) { |
动态原型模式
1 | function Person(name, age, job) { |
寄生构造函数模式
1 | function Person(name, age, job) { |
稳妥构造函数模式
稳妥对象
- 没有公共属性
- 其方法也不引用this的对象
1
2
3
4
5
6
7
8
9
10function Person() {
var o = new Object()
//可以在这里定义私有变量和函数
o.sayName = function () {
alert(name)
}
return o
}
总结自 JavaScript高级程序设计