coffeescript 继承、私有方法、私有属性、公共方法、公共属性、静态方法、静态属性实现

class Parent

_private = null

constructor: ->
@publicAttr= 'publicAttr'

_privateStaticAttr = 'privateStaticAttr'#这里使用的是 = 号定义私有静态属性和方法
_privateStaticFun = ()->#私有静态方法
console.log "Parent::privateStaticFun log #{_privateStaticAttr}"


publicFun: ()->
console.log "Parent::publicFun log #{@publicAttr} #{_privateStaticAttr}"
_privateStaticFun() #私有静态属性和方法直接调用,不用使用 @ 前缀


rewriteFun:()->
console.log "Parent::rewriteFun log #{@publicAttr} #{_privateStaticAttr}"

@staticAttr: 'staticAttr'
@staticFun: ()->
console.log "Parent::staticFun log #{@staticAttr}"


class Child extends Parent
childPublicFun: ()->
try
_privateStaticFun()#报错 TypeError:Object #<Parent> has no method '_privateStaticFun'
catch e
console.log "_privateStaticFun() is error"
console.log "Child::childPublicFun"
@publicFun()

rewriteFun:()->
console.log "Child::rewriteFun"
super()

p = new Parent

p2 = new Parent
p2.publicAttr = "p2 publicAttr"

c = new Child

Parent.staticFun()
#Parent::staticFun log staticAttr
try
p.staticFun()#报错 TypeError:Object #<Parent> has no method 'staticFun'
catch e
console.log "p.staticFun() is error"

p.publicFun()
#Parent::privateStaticFun log privateStaticAttr
#Parent::publicFun log publicAttr privateStaticAttr
p2.publicFun()
#Parent::privateStaticFun log privateStaticAttr
#Parent::publicFun log p2 publicAttr privateStaticAttr

try
p._privateStaticFun()#报错 TypeError:Object #<Parent> has no method '_privateStaticFun'
catch e
console.log "p._privateStaticFun() is error"


Child.staticFun()
#Parent::staticFun log staticAttr

c.publicFun()
#Parent::privateStaticFun log privateStaticAttr
#Parent::publicFun log publicAttr privateStaticAttr

c.childPublicFun()
#_privateStaticFun() is error
#Child::childPublicFun
#Parent::publicFun log publicAttr privateStaticAttr
#Parent::privateStaticFun log privateStaticAttr

c.rewriteFun()
#Child::rewriteFun
#Parent::rewriteFun log publicAttr privateStaticAttr

posted @ 2014-05-09 17:14  不下  阅读(328)  评论(0编辑  收藏  举报