Đây là một giải pháp dựa trên một số câu trả lời khác ở đây cùng với https://stackoverflow.com/a/7579956/1484513 . Nó lưu trữ các biến cá thể riêng (không tĩnh) trong một mảng lớp riêng (tĩnh) và sử dụng ID đối tượng để biết phần tử nào của mảng đó chứa dữ liệu thuộc mỗi cá thể.
(->
i = 1
Object.defineProperty Object.prototype, "__id", { writable:true }
Object.defineProperty Object.prototype, "_id", { get: -> @__id ?= i++ }
)()
class MyClass
__ = []
_a = null
_b = null
c: null
_getA = -> a
getB: -> _b
getD: -> __[@._id].d
constructor: (a,b,@c,d) ->
_a = a
_b = b
__[@._id] = {d:d}
test1 = new MyClass 's', 't', 'u', 'v'
console.log 'test1', test1.getB(), test1.c, test1.getD()
test2 = new MyClass 'W', 'X', 'Y', 'Z'
console.log 'test2', test2.getB(), test2.c, test2.getD()
console.log 'test1', test1.getB(), test1.c, test1.getD()
console.log test1.a
console.log test1._a
class AnotherClass extends MyClass
test1 = new AnotherClass 's', 't', 'u', 'v'
console.log 'test1', test1.getB(), test1.c, test1.getD()
test2 = new AnotherClass 'W', 'X', 'Y', 'Z'
console.log 'test2', test2.getB(), test2.c, test2.getD()
console.log 'test1', test1.getB(), test1.c, test1.getD()
console.log test1.a
console.log test1._a
console.log test1.getA()