發表文章

目前顯示的是 十一月, 2012的文章

Node.js Module Path

一.  Module Path
References:  http://nodejs.org/api/modules.html#modules_loading_from_node_modules_folders
Node.js讀取Module的Path有分為以下幾種:

1.      ./node_modules 2.     ../node_modules 3.     $HOME/.node_modules 4.     $HOME/.node_libraries 5.     $PREFIX/lib/node
所以當你發現找不到modules的時候,可以先看看這幾個路徑有沒有相對應的modules

二.  從node_modules資料夾讀取modules
如果你的module經過require()判斷不是native module的話,並且沒有開頭的部份帶有 '/' , '../' 或是 './' 接著node會從目前module所在的父目錄加上'/node_modules',並 且嘗試從這些位置來讀取module
如果他沒有在目前的目錄加上/node_modules找到module的話,node繼續往上一層繼續找 找到最前面的目錄(root of the tree)為止
我們從範例來看node.js讀取module的路徑的順序是怎樣的,假設我們的檔案在 '/home/user/project/foo.js'然後call require('bar.js'),他會依序以下的目錄來找尋bar.js
1.  /home/user/project/node_modules/bar.js 2.  /home/user/node_modules/bar.js 3.  /home/node_modules/bar.js 4.  /node_modules/bar.js
三.  Folders as Modules
顧名思義就是將文件夾看成是一個module,例如:require('./cat'); 使用這個方式的話node會找尋cat目錄底下兩個檔案來讀取
(如果沒有定義package.json的話):
./cat/index.js ./cat/index.node
但…

wStorage 使用說明

wStorage object主要是讓我更簡單的去存取WebStorage。為什麼我要寫這個呢?

主要是在10月份我去參加Yahoo Open Hack Taiwan 2012的比賽中,我為了寫一

個Web App (http://www.2molab.com/y/) 為了將使用者自己選的服務留下來,然後

服務就會像是圖片的方式留在主畫面中,當然使用者不管怎麼重新刷新頁面或是

重開服務的話,我希望這些服務都不會不見,所以必須要使用到WebStorage的

localStorage來幫我實現這個想法。


wStorage非常容易使用也比較直覺,以下我寫個範例來說明他如何使用:


1. 首先先選擇要用local或是session的Storage,接著就建立wStorage的Instance

var options = { storage : 'local', // choice session or local storage };var ws = new wStorage(options);
2.  確定WebStorage有沒有支援

if(ws.support()){ ..... }
3. 加入資料,你可以加入你要的資料像是String, Array或是Object都可以

ws.add('ws',"my"); // add string ws.add('data_array',data_array); // add array ws.add('obj',ws); // add object
4. 找出資料,我寫了兩個方式一個是一次讀一個,另一個就是全部都讀出來
    至於我是用callback function的方式來處理資料,避免資料量太大時程式會Block

ws.find('ws',function(data){ console.log(data); }) ws.find('data_array',function(data){ data_array1 = data; console.log(data_array1); }) ws.find('obj',function(dat…

CoffeeScript 物件導向簡單用法

最近開始寫Javascript中發覺要把JS寫成像是物件導向的方式有點難寫,還有JS是
Prototype Oriented  Language,後來想到之前去很多研討會想是JSDC, COSCUP之類的
研討會總是會聽到CoffeeScript,想說來試試看好不好用,沒想到一用下去發現,出乎
我意料的好用。

     接下來著我就開始寫簡單的物件導向的例子:(以下的範例我拿官方的例子來改寫)

class Animal
  constructor: (@name) ->
  move: (meters) ->
    alert @name + " moved #{meters}m."

class Snake extends Animal
  move: ->
    alert "Slithering..."
    super 5


sam = new Snake "Sammy the Python"

sam.move()


       CoffeeScript的寫法有點像是Ruby and Python的結合,所以寫出來的程式碼非常的簡潔
,如果有學過Ruby跟Python的話,寫CoffeeScript非常快可以上手。廢話不多說,來講解
一下上面的程式碼。

      首先先建立一個類別Animal,然後這個類別有兩個方法一個是constructor另一個是move
,constructor這個方法只有在建立instance的時候會被呼叫,我們可以看到他帶的一個參數
@name這就是Animal的內部的變數,move這個是Animal的方法,裡面只有做了一件事就是跳出視窗說明這個動物移動了幾公尺。


     接著建立一個新的類別Snake並且他繼承了Animal,所以他也會有Animal所有的功能,接著我們override他的move的方法裡面加了說明他是怎麼動作的說明“Slithering”,如果你要去呼叫父類別Animal的move的方法,就用super這個關鍵字。


    但我在寫的過程中也發現了一件事,如果你在子類別也建立了constructor這個方法,會導致
父類別的constructor被取代掉,這一開始也讓我很煩惱,後來我想到一個方法,雖然不一定正確,但…

Javascript Function Invocation

Reference : http://doctrina.org/Javascript-Function-Invocation-Patterns.html
Javascript Function Invocation Patterns 有以下四種方式: Method InvocationFunction InvocationConstructor InvocationApply And Call Invocation為什麼要瞭解這是四個有什麼不同呢?接著看就知道了。

Function Execution

function在執行的範圍內的任何地方都可以被呼叫。當我們呼叫了 一個function他就會暫時停止目前的function的執行,並且傳遞參數 和控制的訊息到被呼叫的function。

在呼叫function有不同的方式,但這些不同的方式會產生不一樣的結果作者是認為是在設計javascript時的錯誤。所以最好將這四種方式都瞭解對你在撰寫javascript時才不會太多的問題。 The Four Invocation Patterns1. Method Invocation 當一個functiion是object的一部分的話,他稱之為方法(method)。 範例: var obj = { value: 0, increment: function() { this.value+=1; } }; obj.increment(); //Method invocation
increment就是obj的方法,當obj的方法被呼叫後javascript會設定this這個關鍵字指向obj。所以看上面的範例當我們要在increment去讀寫obj的value變數的話,就要寫成this.value。

2. Function Invocation
add(2,3) <== 這樣寫法就是Function Invocation

當我們使用function Invocation的時候,this是被設定為global object而且是指向window object 這是JavaScript設計上的錯誤,一旦不小心寫錯很容易就可以將 global object的內容給破壞掉。
再inner function中這樣的錯誤是很容易出現的,我們可以看一下範例: