Vue -- ES6 快速入門,Vue初識
一、ES6快速入門
let和const
let
ES6新增了let命令,用於宣告變數。其用法類似var,但是宣告的變數只在let命令所在的程式碼塊內有效。
{
let x = 10;
var y = 20;
}
x // ReferenceError: x is not defined
y // 20
View Code
效果如下:
var宣告變數存在變數提升。也就是在宣告變數之前就可以使用該變數。
console.log(x) // undefined,var宣告變數之前可以使用該變數 var x = 10;View Code
重新整理頁面,貼上程式碼,效果如下:
而let不會這樣,let宣告的變數不能在宣告之前使用。
重新整理頁面,貼上程式碼,效果如下:
注意: let不允許在相同的作用域內重複宣告同一個變數。比如:
function foo(){
let x = 10;
var x = 20;
}
foo(); // 報錯
重新整理頁面,貼上程式碼,效果如下:
再比如:
function foo(){ let y = 10; let y = 20; } foo(); // 報錯View Code
重新整理頁面,貼上程式碼,效果如下:
ES5中只有全域性作用域和函式作用域,並沒有塊級作用域。 請看下面的示例:var name = 'Q1mi'
function foo(){
console.log(name)
if (false){
var name = 'Bob'
}
}
foo() // undefined
View Code
重新整理頁面,貼上程式碼,效果如下:
for (var i=0;i<5;i++){ console.log('哈哈'); } console.log(i); // 5View Code
重新整理頁面,貼上程式碼,效果如下:
var宣告的變數會汙染全域性,所以在for迴圈外部可以列印i的值。for迴圈中的i最好使用let宣告
ES6中的let宣告變數的方式實際上就為JavaScript新增了塊級作用域。
var name = 'Q1mi'
function foo(){
console.log(name)
if (false){
let name = 'Bob'
}
}
foo() // Q1mi
View Code
重新整理頁面,貼上程式碼,效果如下:
此時,在foo函式內容,外層程式碼塊就不再受內層程式碼塊的影響。所以類似for迴圈的計數變數我們最好都是用let來宣告。
let宣告能夠將變數限制在當前的塊級作用域中
const
const用來宣告常量。const宣告變數必須立即初始化,並且其值不能改變。
const宣告常量的作用域與let相同,只在生命所在的塊級作用於內有效
例如:const PI = 3.14;
舉例:
const 用來宣告一個常量,不能修改
全域性物件的屬性:
ES6規定:var命令和function命令宣告的全域性變數依舊是全域性物件的屬性;let命令、const命令和class命令宣告的全域性變數不屬於全域性物件的屬性。
檢視下面的示例程式碼:
var x = 10;
let y = 20;
window.x // 10
window.y // undefined
View Code
重新整理頁面,貼上程式碼,效果如下:
變數的解構賦值
ES6允許按照一定的模式,從陣列或物件中提取值,對變數進行賦值,這種方式被成為解構賦值
var [x, y, z] = [10, 20, 30];
x; //10
y; //20
z; //30
View Code
重新整理頁面,貼上程式碼,效果如下:
物件的解構賦值:
var {x, y} = {x: 10, y: 20};
x; // 10
y; // 20
View Code
重新整理頁面,貼上程式碼,效果如下:
var和function宣告的變數,預設會在windows物件上
let宣告的變數預設不會出現在windows物件上
舉例:
window.name1輸出undefined
函式
箭頭函式
箭頭函式特點:
1.如果引數只有一個,可以省略小括號
2.如果不寫return,可以不屑大括號
3.沒有arguments
4.不改變this指向
其中箭頭函式中this指向被固定化,不是因為箭頭函式內部有繫結this的機制。實際原因是箭頭函式根本沒有自己的this,導致內部的this就是外層程式碼塊的this
可以檢視下面兩段程式碼輸出的區別:
var person = {
name: 'Q1mi',
age:18,
func:function(){
console.log(this);
}
}
person.func() // person物件
View Code
重新整理頁面,貼上程式碼,效果如下:
和
var person = {
name: 'Q1mi',
age:18,
func:()=>{
console.log(this);
}
}
person.func() // window物件
View Code
重新整理頁面,貼上程式碼,效果如下:
但凡用到箭頭函式,不要用this
物件
屬性簡潔表示法
ES6允許直接寫入變數和函式作為物件的屬性和方法。
function f(x, y){
return {x, y}
}
View Code
上面的寫法等同於:
function f(x, y){
return {x: x, y: y}
}
View Code
物件的方法也可以使用簡潔表示法:
var o = {
method(){
return "hello";
}
}
View Code
等同於:
var o = {
method: function(){
return "Hello";
}
}
View Code
重新整理頁面,貼上程式碼,效果如下:
Object.assign()
Object.assign方法用來將源物件(source)的所有可列舉屬性複製到目標物件(target)。它至少需要兩個物件作為引數,第一個引數是目標物件,第二個引數是源物件。
引數必須都是物件,否則丟擲TypeError錯誤。
Object.assjgn只複製自身屬性,不可列舉屬性(enumerable為false)和繼承的屬性不會被複制。
簡單示例:
var x = {name: "Q1mi", age: 18};
var y = x;
var z = Object.assign({}, x);
x.age = 20;
x.age; // 20
y.age; // 20
z.age; // 18
View Code
重新整理頁面,貼上程式碼,效果如下:
注意:
Object.assign方法的其他用處,可檢視文末連結。
面向物件:類
ES5的構造物件的方式 使用建構函式來創造。建構函式唯一的不同是函式名首字母要大寫。 建構函式,使用new關鍵字建立物件 修改test.html,增加一段js程式碼<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <form action="" method="post"> <input type="text" name="name"> <input type="submit" value="提交"> </form> <script> // 定義一個建構函式 function Point(x, y){ this.x = x; this.y = y; } // 給父級繫結方法 Point.prototype.toSting = function(){ return '(' + this.x + ',' + this.y + ')'; }; // 生成一個Point物件 var p = new Point(10, 20); console.log(p.x); console.log(p.toSting()); // 繼承 function ColorPoint(x, y, color){ Point.call(this, x, y); this.color = color; } // 繼承父類的方法 ColorPoint.prototype = Object.create(Point.prototype); // 修復 constructor ColorPoint.prototype.constructor = Point; // 擴充套件方法 ColorPoint.prototype.showColor = function(){ console.log('My color is ' + this.color); }; var cp = new ColorPoint(10, 20, "red"); console.log(cp.x); console.log(cp.toSting()); cp.showColor(); </script> </body> </html>View Code
重新整理頁面,效果如下:
ES6 使用Class構造物件的方式:
修改test.html,js程式碼如下:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <form action="" method="post"> <input type="text" name="name"> <input type="submit" value="提交"> </form> <script> class Point{ constructor(x, y){ this.x = x; this.y = y; } // 不要加逗號 toSting(){ return `(${this.x}, ${this.y})`; } } var p = new Point(10, 20); console.log(p.x); p.toSting(); class ColorPoint extends Point{ constructor(x, y, color){ super(x, y); // 呼叫父類的constructor(x, y) this.color = color; } // 不要加逗號 showColor(){ console.log('My color is ' + this.color); } } var cp = new ColorPoint(10, 20, "red"); console.log(cp.x); cp.toSting(); cp.showColor(); </script> </body> </html>View Code
重新整理頁面,效果如下:
二、Vue
介紹
Vue.js 是什麼
Vue (讀音 /vjuː/,類似於 view) 是一套用於構建使用者介面的漸進式框架。與其它大型框架不同的是,Vue 被設計為可以自底向上逐層應用。Vue 的核心庫只關注檢視層,不僅易於上手,還便於與第三方庫或既有專案整合。另一方面,當與現代化的工具鏈以及各種支援類庫結合使用時,Vue 也完全能夠為複雜的單頁應用提供驅動。
如果你想在深入學習 Vue 之前對它有更多瞭解,我們製作了一個視訊,帶您瞭解其核心概念和一個示例工程。
如果你已經是有經驗的前端開發者,想知道 Vue 與其它庫/框架有哪些區別,請檢視對比其它框架。
起步
官方指南假設你已瞭解關於 HTML、CSS 和 JavaScript 的中級知識。如果你剛開始學習前端開發,將框架作為你的第一步可能不是最好的主意——掌握好基礎知識再來吧!之前有其它框架的使用經驗會有幫助,但這不是必需的。
嘗試 Vue.js 最簡單的方法是使用 JSFiddle 上的 Hello World 例子。你可以在瀏覽器新標籤頁中開啟它,跟著例子學習一些基礎用法。或者你也可以建立一個 .html
檔案,然後通過如下方式引入 Vue:
<!-- 開發環境版本,包含了有幫助的命令列警告 --> <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
或者:
<!-- 生產環境版本,優化了尺寸和速度 --> <script src="https://cdn.jsdelivr.net/npm/vue"></script>
安裝教程給出了更多安裝 Vue 的方式。請注意我們不推薦新手直接使用 vue-cli
,尤其是在你還不熟悉基於 Node.js 的構建工具時。
如果你喜歡互動式的東西,你也可以查閱這個 Scrimba 上的系列教程,它揉合了錄屏和程式碼試驗田,並允許你隨時暫停和播放。
宣告式渲染
Vue.js 的核心是一個允許採用簡潔的模板語法來宣告式地將資料渲染進 DOM 的系統:
html程式碼
<div id="app"> {{ message }} </div>
js程式碼
var app = new Vue({
el: '#app',
data: {
message: 'Hello Vue!'
}
})
舉例:
test.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <div id="d1"> <p>{{ message }}</p> </div> <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script> <script> var app = new Vue({ el: '#d1', data: {message: '第一個Vue示例'} }) </script> </body> </html>View Code
直接訪問test.html頁面,效果如下:
注意:請勿使用django框架執行,因為它也是用{{ }},來表示一個變數。
所以使用django執行時,頁面是空白的!
我們已經成功建立了第一個 Vue 應用!看起來這跟渲染一個字串模板非常類似,但是 Vue 在背後做了大量工作。現在資料和 DOM 已經被建立了關聯,所有東西都是響應式的。我們要怎麼確認呢?開啟你的瀏覽器的 JavaScript 控制檯 (就在這個頁面開啟),並修改 app.message
的值,你將看到上例相應地更新。
舉例:
所有的dom操作,用vue來實現了
待續。。。。