标题
内容
原来写法
类和构造函数一样
属性和方法分开写的
// 老版本
function User(name, pass) {
this.name = name
this.pass = pass
}
User.prototype.showName = function () {
console.log(this.name)
}
User.prototype.showPass = function () {
console.log(this.pass)
}
var u1 = new User(‘able’, ‘1233’)
u1.showName()
u1.showPass()
// 老版本继承
function VipUser(name, pass, level) {
User.call(this, name, pass)
this.level = level
}
VipUser.prototype = new User()
VipUser.prototype.constructor = VipUser
VipUser.prototype.showLevel = function () {
console.log(this.level)
}
var v1 = new VipUser(‘blue’, ‘1234’, 3)
v1.showName()
v1.showLevel()
新版面向对象
有了 class 关键字、构造器
class 里面直接加方法
继承,super 超类==父类
class User {
constructor(name, pass) {
this.name = name
this.pass = pass
}
showName() {
console.log(this.name)
}
showPass() {
console.log(this.pass)
}
}
var u1 = new User(‘able2’, ‘111’)
u1.showName()
u1.showPass()
// 新版本继承
class VipUser extends User {
constructor(name, pass, level) {
super(name, pass)
this.level = level
}
showLevel(){
console.log(this.level)
}
}
v1 = new VipUser(‘blue’, ‘123’, 3)
v1.showLevel()
React
用于构建用户界面的 JavaScript 库
组件化,一个组件就是一个 class
JSX == bable == browser.js
JSON 格式
JavaScript Object Notation 的缩写,是一种用于数据交换的文本格式
JSON 是 JS对象 的严格子集
JSON 的标准写法
只能用双引号
所有的key都必须用双引号包起来
JSON 对象
JSON 对象是 JavaScript 的原生对象,用来处理 JSON 格式数据,有两个静态方法
JSON.parse(string) :接受一个 JSON 字符串并将其转换成一个 JavaScript 对象。
JSON.stringify(obj) :接受一个 JavaScript 对象并将其转换为一个 JSON 字符串。
var json = {a: 12, b: 5}
var str = ‘hi,’ + JSON.stringify(json)
var url = ‘http://www.xx.com/’ + encodeURIComponent(JSON.stringify(json))
console.log(str)
console.log(url)
var str = ‘{“a”: 12, “b”: 4, “c”: “abc”}’
var json = JSON.parse(str)
console.log(json)
hi,{“a”:12,“b”:5}
http://www.xx.com/%7B%22a%22%3A12%2C%22b%22%3A5%7D
{ a: 12, b: 4, c: ‘abc’ }
是 JavaScript 语言的核心概念,也是最重要的数据类型
对象就是一组“键值对”(key-value)的集合,是一种无序的复合数据集合
对象的所有键名都是字符串, 所以加不加引号都可以
如果键名是数值,会被自动转为字符串
对象的每一个键名又称为“属性”(property),它的“键值”可以是任何数据类型
如果一个属性的值为函数,通常把这个属性称为“方法”,它可以像函数那样调用
in 运算符用于检查对象是否包含某个属性(注意,检查的是键名,不是键值
for…in循环用来遍历一个对象的全部属性
key-value 一样时可以简写
里面函数可以简写, 去掉
var a = 12, b = 5
console.log({a:a, b:b})
console.log({a, b})
console.log({a, b, c:“c”})
console.log({ a, b, show(){ console.log(‘a’) }})
{ a: 12, b: 5 }
{ a: 12, b: 5 }
{ a: 12, b: 5, c: ‘c’ }
{ a: 12, b: 5, show: [Function: show] }
异步和同步
异步,操作之间没有关系,同时执行多个操作, 代码复杂
同步,同时只能做一件事,代码简单
Promise 对象
用同步的方式来书写异步代码
Promise 让异步操作写起来,像在写同步操作的流程,不必一层层地嵌套回调函数
改善了可读性,对于多层嵌套的回调函数很方便
充当异步操作与回调函数之间的中介,使得异步操作具备同步操作的接口
Promise 也是一个构造函数
接受一个回调函数f1作为参数,f1里面是异步操作的代码
返回的p1就是一个 Promise 实例
所有异步任务都返回一个 Promise 实例
Promise 实例有一个then方法,用来指定下一步的回调函数
function f1(resolve, reject) {
// 异步代码…
}
var p1 = new Promise(f1);
p1.then(f2); // f1的异步操作执行完成,就会执行f2。
Promise 使得异步流程可以写成同步流程
// 传统写法
step1(function (value1) {
step2(value1, function(value2) {
step3(value2, function(value3) {
step4(value3, function(value4) {
// …
});
});
});
});
// Promise 的写法
(new Promise(step1))
.then(step2)
.then(step3)
.then(step4);
Promise.all(promiseArray)方法
将多个Promise对象实例包装,生成并返回一个新的Promise实例
promise数组中所有的promise实例都变为resolve的时候,该方法才会返回
并将所有结果传递results数组中
promise数组中任何一个promise为reject的话,则整个Promise.all调用会立即终止,并返回一个reject的新的promise对象
var p1 = Promise.resolve(1),
p2 = Promise.resolve(2),
p3 = Promise.resolve(3);
Promise.all([p1, p2, p3]).then(function (results) {
console.log(results); // [1, 2, 3]
});
Promise.race([p1, p2, p3])
Promse.race就是赛跑的意思
哪个结果获得的快,就返回那个结果
不管结果本身是成功状态还是失败状态
generator 生成器函数
普通函数,一路到底
generator函数,中间可以停,到哪停呢,用 yield 配合,交出执行权
yield 有 放弃、退让、退位的意思
需要调用next()方法启动执行,需要遇到 yield 停, 踹一脚走一步
generator函数前面加一个 * 两边可以有空格,或靠近函数或function
背后实际生成多个小函数,实现走走停停
function show() {
console.log(‘a’)
console.log(‘b’)
}
show() // 普通函数
function *show2() {
console.log(‘1’)
yield
console.log(‘2’)
}
let genObj = show2()
genObj.next() // 1
genObj.next() // 2
genObj.next() // 最后了,没有结果
generator-yield是啥
yield
既可传参,又可以返回
第一个next()传参无效,只用来启动
如果函数前漏掉 (*)
就是普通函数
如果有yield会报错, ReferenceError: yield is not defined
yield 只能在Generator函数内部使用
function * show() {
console.log(‘1’)
var a = yield
console.log(‘2’)
console.log(a)
}
// yield 传参
var gen = show()
gen.next() // 1
gen.next() // 2 和 undefined 因为没有传参,yield没有返回值
var gen = show()
gen.next(10) // 1 第一次执行到yield,但没有执行赋值
gen.next(20) // 2 和 20
function* show2() {
console.log(‘1’)
yield 10
console.log(‘2’)
}
// yield 返回
var gen = show2()
var res1 = gen.next()
console.log(res1) // { value: 10, done: false }
var res2 = gen.next()
console.log(res2)
// { value: undefined, done: true } 最后的value需要return返回
Promise 适合一次读一组
generator 适合逻辑性的
// 带逻辑-generator
runner(function * () {
let userData = yield $.ajax({url: ‘getUserData’})
if (userData.type == ‘VIP’) {
let items = yield $.ajax({url: ‘getVIPItems’})
} else {
let items = yield $.ajax({url: ‘getItems’})
}
})
// yield 实例,用同步方式写异步
server.use(function * () {
let data = yield db.query(select * from user_table
)
this.body = data
})
数组
arr.includes() 数组是否包含某个东西
数组的 arr.keys(), arr,entries()
for … in 遍历数组 下标 key
for … of 遍历数组 值 value, 不能用于json
let arr = [‘a’, ‘b’, ‘c’]
console.log(arr.includes(1))
for (let i in arr) {
console.log(i) // 循环的时下标 key
}
小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Web前端开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注:前端)
ajax
1)ajax请求的原理/ 手写一个ajax请求?
2)readyState?
3)ajax异步与同步的区别?
4)ajax传递中文用什么方法?
小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Web前端开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
[外链图片转存中…(img-9DpmzsRj-1710771744587)]
[外链图片转存中…(img-qFvpQBvO-1710771744588)]
[外链图片转存中…(img-xNYDcZrf-1710771744589)]
[外链图片转存中…(img-PtF4597P-1710771744589)]
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注:前端)
[外链图片转存中…(img-9zwG4sRj-1710771744590)]
ajax
1)ajax请求的原理/ 手写一个ajax请求?
2)readyState?
3)ajax异步与同步的区别?
4)ajax传递中文用什么方法?
[外链图片转存中…(img-WVe0Mfhg-1710771744590)]
[外链图片转存中…(img-PaunSRtP-1710771744591)]