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