摘要:類總所周知,不像其他面向對象語言那樣支持類,但是可以通過函數和原型來模擬類。如果你學習過或者其他面向對象語言的話,你會覺得很熟悉。結論下一個版本的會帶來一個更加簡單更加友好的語法來幫助那些從面向對象語言轉過來的開發者的學習。
原文地址:http://www.frontendjournal.com/javascript-es6-learn-important-features-in-a-few-minutes/
下一個Javascript版本,也就是ECMAScript 6(ES6或者Harmony),給我們帶來了很多令人興奮的特性。下面我們來快速看看這些特性。下面列出的這些特性是我覺得很可能會在你日常工作中用到的。
如果你是一個Javascript新手或者原來是做服務器端開發的,那么你也不必擔心,我相信現在是學習Javascript的最好時機,因為ES6有很多簡介并且友好的特性。
總所周知,Javascript不像其他面向對象語言那樣支持類,但是Javascript可以通過函數和原型來模擬類。
下面是一個創建類的新語法。如果你學習過Java或者其他面向對象語言的話,你會覺得很熟悉。
class Project { constructor(name) { this.name = name; } start() { return "Project " + this.name + " starting"; } } var project = new Project("Journal"); project.start(); // "Project Journal starting"
所有你在類里面聲明的方法都會添加到類的原型中。
正如前面說的,Javascript不支持類。所以,既然它不支持類,那么它支持繼承嗎?
的確,Javascript中的繼承大部分是通過原型實現。如果你對原型不熟悉,那么一個好消息就是在ES6中你沒必要了解原型就可以使用類和繼承。原型并不難學習但是在這里你只要知道原型是javascript中實現繼承的一種方式就可以了。
下面我創建了一個Project的子類,命名為WebProject并且繼承Project中的屬性和方法
class WebProject extends Project { constructor(name, technologies) { super(name); this.technologies = technologies; } info() { return this.name + " uses " + arrayToString(this.technology); } } function arrayToString(param) { // ... some implementation } var webJournal = new WebProject("FrontEnd Journal", "javascript"); webJournal.start(); // "FrontEnd Journal starting" webJournal.info(); // "FrontEnd Journal uses javascript"
注意到在WebProject的構造函數中調用了Project的構造函數,然后就可以使用它的屬性和方法了。
如果你不想把你的JS代碼都放在一個文件中或者你想在你的應用中的其他部分重用一些功能,那么你就很可能要用到模塊。你需要記住的一個變量是export,只要在你要暴露出來的方法前面加上export就可以了。
下面是我們應用的結構。Project類和WebProject類被放在application.js中。
myproject (folder) | -- modules (folder) | | | -- helpers.js | -- application.js
讓我們把arrayToString()方法從application.js中分離出來然后放在modules/helpers.js模塊中,這樣我們就可以在其他地方重用它了。
// modules/helper.js export function arrayToString(param) { // some implementation }
現在我們只需要在application.js中導入我們的模塊就可以了。
// application.js import { arrayToString } from "modules/helpers"; class WebProject extends Project { constructor(name, technologies) { super(name); this.technologies = technology; } info() { return this.name + " uses " + arrayToString(this.technology); } } // ...ES6的其他特性
下面兩個ES6中的特性就比較有趣了。let和const。
let為了理解let,首先我們需要記住var創建的是函數作用域的變量:
function printName() { if(true) { var name = "Rafael"; } console.log(name); // Rafael }
注意到,不像Java或者許多其他語言那樣,Javascript中任何在一個函數內部創建的變量都會被提升到函數的頂部。這就意味著無論你在哪里聲明的變量,效果就像都是在函數頂部聲明的一樣。這種行為就叫做提升
所以上面的函數可以理解成下面這樣:
function printName() { var name; // variable declaration is hoisted to the top if(true) { name = "Rafael"; } console.log(name); // Rafael }
那么,let是如何工作的呢?
我們用同樣的例子來看看:
function printName() { if(true) { let name = "Rafael"; } console.log(name); // ReferenceError: name is not defined }
由于let是在塊內部,所以name變量只能在塊中訪問。
function printName() { var name = "Hey"; if(true) { let name = "Rafael"; console.log(name); // Rafael } console.log(name); // Hey }
在這個例子中,由于let引用了已經聲明的變量,所以"Rafael"只在塊內部合法。在塊的外部name的值是"Hey"。
總之,var是函數作用域的而let是塊級作用域的。
Javascript在過去很長一段時間都不支持創建常量。隨著ES6的到來,你將可以創建常量并且保證它的值不會被改變。
創建常量的語法如下:
const SERVER_URL = "http://frontendjournal.com"其他有趣的特性
ECMAScript 6 同時還帶來了很多其他特性:Map,WeakMap,Generators和Proxies。
什么時候可以開始使用ES6? Firefoxs是支持最多特性的瀏覽器而Juriy Zaytsev已經把主要瀏覽器的支持列出來了。 http://kangax.github.com/es5-compat-table/es6/
一些ES6特性在NodeJS中也可以使用。可以查看Alex Young的博客ES6 for Node。
下一個版本的Javascript會帶來一個更加簡單更加友好的語法來幫助那些從面向對象語言轉過來的開發者的學習。現在的唯一的問題就是主要瀏覽器對ES6的全面支持還需要一些時間。
譯者注: 目前對ECMAScript 6支持比較好的兩個瀏覽器就是Chrome和Firefox,為了更好地體驗ES6,我們需要下載開發者版本的瀏覽器,Chrome Canary 下載地址,Firefox Aurora 下載地址。
要在Firfox中開啟ECMAScript 6,需要把標簽改為。1.8是Firefox現在支持的版本最高的javascript。
在Chrome中開啟ECMAScript 6,只需要使用嚴格模式就可以了,也就是在腳本前面加上"use strict"。不過在這之前還需要在地址欄中輸入chrome://flags/,然后啟用實驗性 JavaScript。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/78149.html
摘要:今天收到一封郵件組的郵件,是關于的,版將作為第一個的版。版特性包括挑了感興趣的看了下,包括以下通過使用并行來改進最壞情況下的延遲。雖然式設計成避免的,但有些情況下回收器會降級成。 今天收到一封郵件組的郵件,是關于JDK 10 First Release Candidate的, JDK10 b43版將作為第一個JDK10的RC版。 b43版特性包括: 286: Local-Variabl...
摘要:與此相對,強類型語言的類型之間不一定有隱式轉換。三為什么是弱類型弱類型相對于強類型來說類型檢查更不嚴格,比如說允許變量類型的隱式轉換,允許強制類型轉換等等。在中,加性運算符有大量的特殊行為。 從++[[]][+[]]+[+[]]==10?深入淺出弱類型JS的隱式轉換 本文純屬原創? 如有雷同? 純屬抄襲? 不甚榮幸! 歡迎轉載! 原文收錄在【我的GitHub博客】,覺得本文寫的不算爛的...
摘要:地址運行在中的本周增長數是一個可在容器中運行應用或者桌面的工具庫。地址自動補全本周增長數是一個自動補全輸入命令的終端工具。地址數據庫本周增長數用語言編寫的用于查看和最終編輯數據庫的,目前只支持,的支持在規劃中。 .markdown-body{word-break:break-word;line-height:1.75;font-weight:400;font-size:15px;overf...
摘要:作者小魚干機械臂可能在醫療劇中看過,可以用來執行一些精細化的操作,例如縫合之類的。地址周榜新編程語言本周增長數一種正在開發中的編譯型編程語言。地址資源監控本周增長數它是一個自托管的監控工具,類似于。 .markdown-body{word-break:break-word;line-height:1.75;font-weight:400;font-size:15px;overflow-x:...
閱讀 1264·2021-10-18 13:32
閱讀 2333·2021-09-24 09:47
閱讀 1323·2021-09-23 11:22
閱讀 2463·2019-08-30 14:06
閱讀 571·2019-08-30 12:48
閱讀 1997·2019-08-30 11:03
閱讀 535·2019-08-29 17:09
閱讀 2462·2019-08-29 14:10