這個章節(jié)需要大家?guī)兔ρa充,一次性想不完那么多
http://book.douban.com/subject/3590768/
這本書很薄,只有 155 頁,但該講的幾乎都講了。大家想辦法搞來看看吧(我總不能很沒節(jié)操地給個電子版 PDF 鏈接在這里吧)。
js 這門語言,水很淺。沒有太復(fù)雜的地方可以鉆,但特么的坑又多。
上面的那本書是一定要看的。這本書專注在講 js 語法,其他 js 的書都過多地涉及了瀏覽器知識。
js 前端不懂有什么好辦法,后端的話,很方便。
用 node 官方的 util
庫,下面是直接從官網(wǎng)摘抄來的:
var util = require("util");
var events = require("events");
function MyStream() {
events.EventEmitter.call(this);
}
util.inherits(MyStream, events.EventEmitter);
MyStream.prototype.write = function(data) {
this.emit("data", data);
}
var stream = new MyStream();
console.log(stream instanceof events.EventEmitter); // true
console.log(MyStream.super_ === events.EventEmitter); // true
stream.on("data", function(data) {
console.log('Received data: "' + data + '"');
})
stream.write("It works!"); // Received data: "It works!"
js 是面向?qū)ο蟮?,但是是“基于原型的面向?qū)ο蟆保瑳]有類。沒有多重繼承,沒有接口。沒有結(jié)構(gòu)體,沒有枚舉類型。
但它的字面量哈希和 function 都足夠靈活,拼拼湊湊,上面那些東西都能“模擬”著用。
說到?jīng)]有類的這個問題,很多人總是要糾正其他人關(guān)于 js 原型的理解的。我覺得這是沒有必要的?;谠陀植皇呛芘1疲珽S6不是照樣給出了 class 關(guān)鍵字嗎。不管類還是原型都是為了抽象,爛的東西始終爛,不好理解的始終不好理解。
最近學(xué)習(xí) ios 的 swift,看見里面有不少相比 objc 舒服的改進(jìn)。比如 objc 的“方法調(diào)用”,學(xué)的是 smalltalk 那一套,那不叫方法調(diào)用,而是消息傳遞。結(jié)果 swift 里面不照樣是方法調(diào)用的形式?
用 eventproxy 和 async 已經(jīng)能解決大部分問題。剩下的小部分問題,肯定是設(shè)計錯誤。:)
參見:
寫 js 很少去定義類。Object 的便利在多數(shù)其他語言需要定義類的場景下都能直接用。
js 中,用好 Number,String,Array,Object 和 Function 就夠了。有時用用 RegExp。
用于 js 這門語言本身的殘廢,大多數(shù)時候都采用“約定勝于配置”的思想來交互合作。
很常規(guī),C 語言那套。
C 語言那套。二進(jìn)制操作并不會降低效率,V8 很聰明的。
也就是幫一個對象的屬性定義 get 和 set 方法,通過 obj.value
和 obj.value=
的形式來調(diào)用。
koa(http://koajs.com/ ) 把這套玩得爐火純青。
無
手動幫你需要轉(zhuǎn)換的類型的類定義 .toxxx
方法,比如 .toString
,.toJSON
,toNumber
。
js 的隱式類型轉(zhuǎn)換用一次坑一次。
在 js 中,務(wù)必使用 ===
三個等于號來比較對象,或者自定義方法來比較,不要使用 ==
。
我最近做一個項目,從數(shù)據(jù)庫中取出的數(shù)據(jù),雖然應(yīng)該是字符型的,但有時它們是 String 的表示,有時是 Number 的表示。為了省事,會有人直接用 ==
來對它們進(jìn)行比較。這種時候,建議在比較時,把它們都轉(zhuǎn)成 String 類型,然后用===
來比較。
比如 var x = 31243; var y = '31243'
,比較時,這么做:String(x) === String(y)
隨便弄。
function 構(gòu)造函數(shù)、閉包、字面量哈希,都可以混在一起寫,多少層都行,無限制。
當(dāng)無法接觸一個類的源碼,又想幫這個類新增方法的時候。操作它的 prototype 就好了。但不推薦!
js 中,匿名函數(shù)非常的方便,有效利用函數(shù)式編程的特性可以使人寫代碼時心情愉悅。
使用 lodash:https://lodash.com/docs
類型都經(jīng)常忽略還泛型!every parammeter is 泛型 in js
類定義中,沒有 public private 等關(guān)鍵詞,都靠約定。而且經(jīng)常有人突破約定。
有些 http 方面的庫,時不時就去 stub 原生 http 庫的方法,0.11 時的 node.js 完全不按章法出牌,所以很多這些庫都出現(xiàn)兼容性問題。
《解密設(shè)計模式-王垠》
https://github.com/alsotang/node-lessons/blob/master/lesson14/%E8%A7%A3%E5%AF%86%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F-%E7%8E%8B%E5%9E%A0.md
從 npm 上面尋找質(zhì)量高的庫,并用質(zhì)量高的方式拼湊起來。
更多建議: