Javascript 我们可以在运行时使用键控函数的对象定义类吗?

Javascript 我们可以在运行时使用键控函数的对象定义类吗?,javascript,class,coffeescript,Javascript,Class,Coffeescript,我正在尝试创建一个模拟助手,它可以模拟类并为特定方法名返回特定值: methods_values = a : 1 b : 2 c : 3 methods = {} for method, value of methods_values methods[method] = -> value console.log methods // Outputs "{ a: [Function], b: [Function], c: [Fu

我正在尝试创建一个模拟助手,它可以模拟类并为特定方法名返回特定值:

  methods_values =
    a : 1
    b : 2
    c : 3
  methods = {}
  for method, value of methods_values
    methods[method] = ->
      value
  console.log methods
  // Outputs "{ a: [Function], b: [Function], c: [Function] }"

  class MockClass
    methods
  mock_instance = new MockClass()
  console.log mock_instance
  // Outputs "{}"

  for method, value of methods_values
    console.log method
    // Outputs "a"

    console.log mock_instance[method]()
    // Gives error "TypeError: Object #<MockClass> has no method 'a'"
产出:

a
1
b
2
c
3

为此,您应该将所有
方法
混合到
MockClass.prototype中。下面是一个这样做的示例:

mixin = (proto, methods) ->
  for name, fn of methods
    proto[name] = fn
  return

class MockClass
  mixin @::, methods
还是你的情况

mock_methods = (proto, methods_values) ->
  for method, value of methods_values
    do (value) -> proto[method] = -> value
  return

class MockClass
  mock_methods @::, methods_values

太棒了,谢谢!虽然我不得不限制
proto[method]=->值的范围
@DanH哎呀,我的错。忘记添加闭包。固定的。
mock_methods = (proto, methods_values) ->
  for method, value of methods_values
    do (value) -> proto[method] = -> value
  return

class MockClass
  mock_methods @::, methods_values