标签:
命门
这个词也许并不恰当,但是每种编程语言或者每个事物都有一些最基础的东西,这些基础的东西不明白,即使你写了多年的代码,仍然会迷迷糊糊,比如前段时间我在写Processing
程序的时候,很多初次接触程序设计的艺术家或者未来的艺术家们,常常会问"我想要这种效果,这么写怎么没用?"类似的问题,在我看来Processing
或者其他的动画库一般有有两点是必须要了解的:
第一点就是坐标
,这个大家可能都明白点儿,一般也够用了.
第二点就是动画
,也就是动画如何产生的.
简单点说,Processing
提供了一个画布,和一个draw
的接口,每秒钟会不停的调用draw
很多次(frameRate
),每一次draw
的时候先清空(或者不清空)画布,再绘制想要图案,两次图案的视觉差就会给人产生动的感觉.
扯远了,我觉得JavaScript中这种级别的知识点就是,function
和prototype
:
函数
startAnimation = -> ... stopAnimation = -> ...
原型
# Anim class Anim = -> ... Anim.prototype.start = -> ... Anim.prototype.stop = -> ... # usage anim = new Anim() anim.start() anim.stop()
更紧凑的写法
# Anim class Anim = -> ... Anim.prototype = start = -> ... stop = -> ...
为Function原型添加method方法
Function.prototype.method = (name,fn)-> @.prototype[name]=fn # Anim class Anim = -> ... Anim.method ‘start‘, -> ... Anim.method ‘storp‘, -> ...
method的链式调用
Function.prototype.method = (name,fn)-> @.prototype[name]=fn @ # Anim class Anim = -> ... Anim .method(‘start‘, -> ...). .method(‘storp‘, -> ...)
又是类型,JavaScript虽然没有类型声明,变量值却有类型之分,和Java一样,分为原始类型和对象类型,前者值传递,后者引用传递:
原始类型:布尔,数值(不区分浮点整型),字符串
对象类型
函数类型
空类型null
未定义类型undefined
类型转换:
parseFloat
parseInt
toString
!!someVar
匿名函数
(-> foo=10 bar=2 alert foo*bar )()
带参数的匿名函数
((foo, bar)-> alert foo*bar )(10, 2)
匿名函数赋值
baz = ((foo, bar)-> foo*bar )(10, 2)
这里baz
的值是10,
匿名函数和闭包
baz = null (()-> foo=10 bar=2 baz = -> foo*bar )() baz()
关于闭包 Closure
的概念大家可以自己搜索下,Java8都有了闭包的实现.
对类和对象的修改:
Person = (name,age)-> @name=name @age=age Person.prototype = getName: -> @name getAge: -> @age alice = new Person ‘Alice‘, 18 bill = new Person ‘Bill‘, 22 # modify the class Person.prototype.getGreeting = -> "Hi, #{@name}!" # modify a instance alice.displayGreeting = -> alert @getGreeting()
好玩的事情就是你不仅可以改变类,还能改变类的实例.改变类的属性/方法不仅能改变之后声明的变量,之前声明的变量也会随之改变.
内省和反射 | |
---|---|
内省:运行时获取对象所有的方法和属性 反射:运行时动态实例化和执行方法 |
重读《JavaScript设计模式》- 富有表现力的JavaScript
标签:
原文地址:http://www.cnblogs.com/alanland/p/4296954.html