CoffeeScript
37
HTTP 客户端
问题
你想创建一个HTTP客户端。
解决方案
在这个方法中,我们将使用node.js's HTTP库。我们将从一个简单的客户端GET请求示例返回计算机的外部IP。
关于 GEThttp = require 'http'http.get { host: 'www.google.com' }, (res) ->console.log res.statusCode
get函数,从node.js's http模块,发出一个GET请求到一个ht
21
提示参数
问题
你的函数将会被可变数量的参数所调用。
解决方案
使用splat 。loadTruck = (firstDibs, secondDibs, tooSlow...) ->truck:driversSeat: firstDibspassengerSeat: secondDibstrunkBed: tooSlowloadTruck("Amanda", "Joel")
# => { truck: { driversSeat: "Amand
27
使用 HTML 命名实体替换 HTML 标签
问题
你需要使用命名实体来替代HTML标签:
<br/> => <br/>
解决方案htmlEncode = (str) ->str.replace /[&<>"']/g, ($0) ->"&" + {"&":"amp", "<":"lt", "&
23
创建一个不存在的对象字面值
问题
你想初始化一个对象字面值,但如果这个对象已经存在,你不想重写它。
解决方案
使用存在判断运算符(existential operator)。window.MY_NAMESPACE ?= {}
讨论
这行代码与下面的JavaScript代码等价:window.MY_NAMESPACE = window.MY_NAMESPACE || {};
这是JavaScript中一个常用的技巧,即使用对象字面值来定义命名空间。这样先判断是否存在同名的命名空间然后再创建,可以避免重写已
43
检测每个元素
问题
你希望能够在特定的情况下检测出在数组中的每个元素。
解决方案
使用Array.every(ECMAScript 5):evens = (x for x in [0..10] by 2)evens.every (x)-> x % 2 == 0
# => true
Array.every被加入到Mozilla的Javascript 1.6 ,ECMAScript 5标准。如果你的浏览器支持,但仍无法实施EC5 ,那么请检查[ _.all from underscore.js](
22
重复字符串
问题
你想重复一个字符串。
解决方案
创建一个包含n+1个空元素的数组,然后用要重复的字符串作为连接字符将数组元素拼接到一起:# 创建包含10个foo的字符串
Array(11).join 'foo'# => "foofoofoofoofoofoofoofoofoofoo"
为字符串重复方法
你也可以在字符串的原型中为其创建方法。它十分简单:# 为所有的字符串添加重复方法,这会重复返回 n 次字符串
String::repeat = (n) ->
30
生成器模式
问题
你需要准备一个复杂的、多部分的对象,你希望操作不止一次或有不同的配置。
解决方案
创建一个生成器封装对象的产生过程。
Todo.txt格式提供了一个先进的但还是纯文本的方法来维护待办事项列表。手工输入每个项目有损耗且容易出错,然而TodoTxtBuilder类可以解决我们的麻烦:class TodoTxtBuilderconstructor: (defaultParameters={ }) ->@date = new Date(defaultParameters.date) or
56
大写单词首字母
问题
你想把字符串中每个单词的首字母转换为大写形式。
解决方案
使用“拆分-映射-拼接”模式:先把字符串拆分成单词,然后通过映射来大写单词第一个字母小写其他字母,最后再将转换后的单词拼接成字符串。("foo bar baz".split(' ').map (word) -> word[0].toUpperCase() + word[1..-1].toLowerCase()).join ' '
# => 'Foo Bar