-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
JavaScript - Basic #10
Comments
面向对象概述面向对象程序设计(英语:Object-oriented programming,缩写:OOP)是一种具有对象概念的程序编程典范,同时也是一种程序开发的抽象方针。 面向对象的三大特性
重写 vs 重载
原型
下面总结来自这里
new过程
模拟实现:
由此可见,如果在new函数中加了return:如果return值类型,那么对构造函数没有影响,实例化对象返回空对象;如果return引用类型(数组,函数,对象),那么实例化对象就会返回该引用类型; instanceofinstanceof 可以正确的判断对象的类型,因为内部机制是通过判断对象的原型链中是不是能找到类型的 prototype 模拟实现:
this
判断方法
优先级为:new绑定 > 显示绑定 > 隐式绑定 > 默认绑定; call、apply和bind都是可以用来改变方法执行时this的指向。call和apply立即执行,但取参数的方法不同;bind只是改变指向并返回新的方法。
模拟实现:有点底层了,这里先忽略。参考这里 继承听说有六种继承方式。优缺点参考这里 初始化:
原型链继承
借助构造函数
原型链+构造函数下面几种关键差异在于如何延长原型链:
ES6语法
|
面向函数执行上下文定义:执行上下文(execution context)是评估和执行 JavaScript 代码的环境的抽象概念。每当 Javascript 代码在运行的时候,它都是在执行上下文中运行。 每个执行上下文中都有三个重要的属性
当执行流进入一个函数时,执行上下文就会被推入一个上下文栈中,而在函数执行结束之后,栈将其上下文弹出,把控制权返回给之前的上下文。【来自红宝书】 作用域链参考栈溢出网友的回答,每个函数都会创建一个自己的作用域,并且会连接父级作用域。 function foo(a, b) {
var c;
c = a + b;
function bar(d) {
alert("d * c = " + (d * c));
}
return bar;
}
var b = foo(1, 2);
b(3); // alerts "d * c = 9" 作用域链示意图:
分类
注意js没有块级作用域,即如同类C语言中,用花括号封闭的代码块有自己的作用域,即js中所谓的执行上下文。 闭包定义:函数和对其周围状态(lexical environment,词法环境)的引用捆绑在一起构成闭包(closure)。也就是说,闭包可以让你从内部函数访问外部函数作用域。在 JavaScript 中,每当函数被创建,就会在函数生成时生成闭包。 实际应用生命周期
浅拷贝、深拷贝深浅拷贝都是已经创建了一个新的对象,区别在于对深层级对象的拷贝效果
箭头函数箭头函数表达式的语法比函数表达式更简洁,并且没有自己的this,arguments,super或new.target。箭头函数表达式更适用于那些本来需要匿名函数的地方,并且它不能用作构造函数。 arguments类数组。有下面的特性:
IIFE立即调用函数表达式。形式如下。这个匿名函数拥有独立的词法作用域。好处是不会污染全局作用域,且表达式中的变量不能从外部访问。
|
ES6的新玩意儿一览
PromisePromise 是 ES6 新增的语法,解决了回调地狱的问题。 可以把 Promise 看成一个状态机。初始是 pending 状态,可以通过函数 resolve 和 reject ,将状态转变为 resolved 或者 rejected 状态,状态一旦改变就不能再次变化。 then 函数会返回一个 Promise 实例,并且该返回值是一个新的实例而不是之前的实例。因为 Promise 规范规定除了 pending 状态,其他状态是不可以改变的,如果返回的是一个相同实例的话,多个 then 调用就失去意义了。 GeneratorGenerator 是 ES6 中新增的语法,和 Promise 一样,都可以用来异步编程
从以上代码可以发现,加上 * 的函数执行后拥有了 next 函数,也就是说函数执行后返回了一个对象。每次调用 next 函数可以继续执行被暂停的代码。 用得少,暂时先不手动实现。参考这里 async/await一个函数如果加上 async ,那么该函数就会返回一个 Promise。可以把 async 看成将函数返回值使用 Promise.resolve() 包裹了下。
Proxy参考MDN
|
严格模式简介定义:ECMAScript 5的严格模式是采用具有限制性JavaScript变体的一种方式,从而使代码显示地 脱离“马虎模式/稀松模式/懒散模式“(sloppy)模式。 特性:
开启严格模式
语法变化
|
var let const区别
作用域在哪?参考壹题回答
实现原理参考壹题解答 变量生命周期
具体实现:
|
迭代器Iterator / 生成器Generator可迭代 vs 迭代器可迭代协议对象可迭代,必须实现 js内置的可迭代对象: 迭代器协议对象要成为迭代器,必须实现 生成器生成器函数使用 async/awaitasync / await 是 Generator / yield 加上 Promise的语法糖。 |
常用接口对象相关Object.defineProperty()语法:
for...in vs for...offor...in语句以任意顺序遍历一个对象的除Symbol以外的可枚举属性,不应该用于数组。 for...of语句在可迭代对象(包括 Array,Map,Set,String,TypedArray,arguments 对象等等)上创建一个迭代循环
|
语法基础
数据类型
参考MDN文档
typeof
类型转换
转Boolean
转自MDN:对Symbol.toPrimitive的更多用法
四则运算
one more thing...
双等号比较
分析:
[] == ![] // => true
The text was updated successfully, but these errors were encountered: