大家好,我是翟路佳。全栈工程师,编程爱好者,喜欢分享。
我今年的目标是做一名兴趣使然的分享者,多出内容,帮助尽可能多的同学获得进步。
我经常出没于:
通过学习本系列教程,可以了解现代化前端开发的方方面面:
上data-*
写在
上input[type=text].tqb-date-picker
后Live-server 是开发服务器,基于 Node 实现,能够实现自动刷新。
用法:
live-server --port=8081 --host=localhost --ignore=styl
Node Package Manager = Node 包管理工具
此项目的配置信息,可被 npm
读取。
let
和 const
Class
Module
ES
= ECMAScript
= 由 ECMA 国际(前身为欧洲计算机制造商协会)通过 ECMA-262标准化的脚本程序设计语言。
ES2015 增加了很多优秀的新特性,可以让我们开发出更强壮,更好维护的代码。
以后的开发,都应当以 ES2015 为基础。
let
& const
Destructuring
按照一定模式,从数组和对象中提取值。
// 解构数组
let [a, b, c] = [1, 2, 3];
// a = 1;
// b = 2;
// c = 3;
只要两边模式对照一致,可以有很多种拆法:
let [a, ...b] = [1, 2, 3, 4];
// a = 1
// b = [2, 3, 4]
let [a, , b] = [1, 2, 3];
// a = 1
// b = 3
解构对象
let {a, b, c} = {a: 1, b: 2, c: 3};
// a = 1
// b = 2
// c = 3
// 解构对象只关注键名,不关注顺序
let {b, c, a} = {a: 1, b:2, c: 3};
// a = 1
// b = 2
// c = 3
常见用法:函数返回多个值
function sample() {
return {
a: 1,
b: 2,
c: 3
};
}
let {a, b, c} = sample();
常见用法:作为函数参数
function sample({id, name, age, sex, height, photo}) {
// do something
}
sample({
id: 1,
name: 'meathill',
age: 33,
sex: MALE,
height: 181,
photo: './photo.jpg'
});
let f1 = p1 => {
// do something
};
let f2 = p1 => p1 * 100;
// 等价于
let f2 = p1 => {
return p1 * 100;
}
let f3 = (p1, p2) => {
// do something
};
let f4 = ([p1, p2]) => {
// do something
}
this
固定指向声明它的对象class A {
constructor() {
// 构造函数
// 声明实例属性
this.var = '';
}
method1() {
}
method2() {
}
}
几个常见的点:
class
关键词不存在变量提升super()
之后才有 this
终于有模块机制了!
// profile.js
export let name = 'Meathill';
export let age = 33;
export let weight = 100;
// user.js
import * as user from './profile'
// user.name = 'Meathill';
// user.age = 33;
// user.weight = 100;
// 亦可使用解构方法
import {name, age, weight} from './profile'
默认值
// profile.js
export default 'Meathill';
export let age = 33;
export let weight = 100;
// user.js
import anyname from './profile.js';
let name = 'Meathill';
let age = 33;
let favor = 'Gakki';
alert(`Hi, I'm ${name},I'm ${age}, I like ${favor}`);
// Hi, I'm Meathill, I'm 33, I like Gakki
Hi, ${user.name}
${a * 3}
在计算机编程中,单元测试(英语:Unit Testing)又称为模块测试, 是针对程序模块(软件设计的最小单位)来进行正确性检验的测试工作。 程序单元是应用的最小可测试部件。
以 Node.js 为例
const assert = require('assert');
assert.equal(1, '1'); // 1 == '1' true
核心概念:
总之,测试不嫌少,能写赶紧写。
Webpack 是一个打包工具,降低 Web 中加载资源的难度。
Babel 是一个转译工具,将高版本的 JS 转译成低版本的 JS。亦可转译 JSX(React)。
可复用面向对象软件的基础
定义一系列算法,把它们一个个封装起来,并且使它们可相互替换。
这两个需求差异,很适合用策略模式来处理。
一些可能的抱怨:
我直接写,写完直接 FTP 传上去多省事儿啊!
遇到问题我登到 FTP 上改不就好了么?
整这些乱七八糟的干嘛?
真的是这样么?
结论:
使用中间代码 + 后处理代表着先进生产力,可以提高开发、维护、部署效率,我们应该学习运用。
const gulp = require('gulp');
const stylus = require('gulp-stylus');
const cleanCSS = require('gulp-clean-css');
gulp.task('stylus', () => {
return gulp.src('./styl/screen.styl')
.pipe(stylus())
.pipe(cleanCSS({
level: 2
}))
.pipe(gulp.dest('dist/screen.css'));
});
gulp.task('stylus', () => {
// ....
});
gulp.task('webpack', () => {
// ....
});
gulp.task('html', () => {
// ....
});
gulp.task('default', ['stylus', 'webpack', 'html']);
const sequence = require('run-sequence');
const del = require('del');
gulp.task('clear', () => {
return del(['dist']);
});
gulp.task('default', callback => {
sequence(
'clear',
['other', 'task'],
callback
);
})
任务完成的判定依据:
callback()
webpack.DefinePlugin
const webpack = require('webpack');
module.exports = {
....
plugins: [
new webpack.DefinePlugin({
DEBUG: false,
VERSION: JSON.stringify('1.0.0'),
SUPPORT_ANDROID: false
})
]
};
pre-commit
利用 Git pre-commit 钩子,检查代码,不合规不入库
现实中:
程序员的基础行为准则:
DRY = Don't Repeat Yourself
不要重复你自己。
早年的前端开发:
模块管理 = 使用写好的代码
好处:
最早:
接下来:
最终胜出者:Webpack
优势:
module.exports={}
export default
请对自己的作品负责!
大家好,我是翟路佳。全栈工程师,编程爱好者,喜欢分享。
我今年的目标是做一名兴趣使然的分享者,多出内容,帮助尽可能多的同学获得进步。
我经常出没于:
React 优势:
React 劣势:
Angular 优势:
Angular 劣势
我假定各位:
v-model
value
拆成本地和外部欢迎通过 PR 的方式提交作业:
https://github.com/meathill-freelance/date-picker
我承诺会及时 review 代码。通过后,送 ¥100 以内的书。
Q&A
完整项目代码仓库: