是否有可能在Java中模拟Javascript风格的原型?

时间:2012-07-19 04:09:59

标签: java javascript prototype

我想知道是否可以在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中使用相同的功能?

1 个答案:

答案 0 :(得分:4)

是的,它当然是可能的,并且在某些情况下非常有用。

通常,您会执行以下操作:

  • 创建一个包含属性Map的类。这将成为您所有原型的“基础对象”类。 K可能是String,V可能是Object
  • 为您的媒体资源创建getter和setter
  • 可选择添加其他实用程序方法,例如检查函数是否实现基本上意味着检查属性映射包含特定键
  • 通过克隆另一个对象的属性映射来实现基于原型的继承,或者(更复杂)将引用保留回原始对象
  • 使用某种功能对象允许在属性
  • 中存储任意代码

它不像在动态语言中直接执行它那样优雅,但它可以工作并获得相同的好处(运行时灵活性,避免严格OOP的约束,快速的分类等)。

它也有同样的缺点 - 静态类型检查的丢失和主要的性能开销。

举个例子,我写的开源游戏(Tyrant)将这种方法用于所有游戏内对象。