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