Tôi muốn lồng một số hàm bên trong một thuộc tính lớp như được hiển thị bên dưới.
Thật không may, họ sẽ không có quyền truy cập vào phạm vi chính của lớp học.Phạm vi trong các lớp học coffeescript
Tôi có thể giải quyết điều này mà không phải chuyển từng hàm lồng nhau tham chiếu đến this
?
class myClass
constructor: -> @errors = []
doSomething: -> @errors.push "I work as expected"
functions:
doStuff: ->
@errors.push "I cant access @errors" # => TypeError: Cannot call method 'push' of undefined
ugly: (context) ->
context.errors.push "It works, but I am ugly" # Works fine but requires scope injection
không làm việc thay thế bằng cách sử dụng gợi ý mũi tên chất béo:
class myClass
constructor: ->
@errors = []
@functions:
doStuff: =>
@errors.push "I wont work either" # TypeError: Cannot call method 'toString' of undefined
Tùy chọn thay thế, mà không viết thư cho toàn cầu this.errors
tài sản:
class myClass
constructor: ->
@functions =
errors: []
doStuff: ->
@errors.push "I will write to functions.errors only"
Binding chúng vào/@ này trong hàm tạo? – biziclop
Bạn có nghĩa là 'hàm tạo: -> @errors = [] @functions: doStuff -> ...'? – Industrial
Có thể sử dụng mũi tên chất béo => http://coffeescript.org/#fat_arrow Tôi không phải là chủ nhân coffeescript, xin lỗi :) – biziclop