coffeescript 繼承、私有方法、私有屬性、公共方法、公共屬性、靜態方法、靜態屬性實現

class Parentcode

_private = nullblog

constructor: ->
@publicAttr= 'publicAttr'it

_privateStaticAttr = 'privateStaticAttr'#這裏使用的是 = 號定義私有靜態屬性和方法
_privateStaticFun = ()->#私有靜態方法
console.log "Parent::privateStaticFun log #{_privateStaticAttr}"console


publicFun: ()->
console.log "Parent::publicFun log #{@publicAttr} #{_privateStaticAttr}"
_privateStaticFun() #私有靜態屬性和方法直接調用,不用使用 @ 前綴class


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

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


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()static

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

p = new Parentdi

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

相關文章
相關標籤/搜索