我想知道是否可以在Java中模拟Javascript原型。在Java中,是否可以将变量列表与函数相关联?如果可能的话,我想创建一些类似于Javascript原型的东西。
这里有一个例子(在Javascript中):
var s = doStuff.prototype;
s.isImplemented = false;
function doStuff(){
//this function has not yet been implemented
}
var s = functionIsImplemented.prototype;
s.isImplemented = true;
function functionIsImplemented(theFunction){
//this function returns true if the function has been identified as "implemented"
if(theFunction.prototype.isImplemented == true){
return true;
}
return false;
}
alert(functionIsImplemented(doStuff)); //this should print "false"
alert(functionIsImplemented(functionIsImplemented)); //this should print "true"
有什么方法可以在Java中实现类似的功能吗?
是的,这当然是可能的,并且在某些情况下非常有用。
通常情况下,您会执行以下操作:
- 创建一个包含属性映射的类。这将成为所有原型的"基本对象"类。K可能是字符串,V可能是对象
- 为您的属性创建getter和setter
- 可选地添加其他实用程序方法,例如,检查函数是否实现基本上意味着检查属性映射是否包含特定键
- 通过克隆另一个对象的属性映射或(更复杂的)保留对原始对象的引用来实现基于原型的继承
- 使用某种函数对象允许在属性中存储任意代码
它不像在动态语言中直接这样做那么优雅,但它可以工作,并为您带来同样的好处(运行时灵活性,避免严格OOP的限制,快速预测等)
它也有同样的缺点——静态类型检查的损失和一些性能开销是主要的缺点。
举个例子,我写的开源游戏(Tyrant)对所有游戏中的对象都使用了这种方法。