Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
可以用Java模拟Javascript风格的原型吗?_Java_Javascript_Prototype - Fatal编程技术网

可以用Java模拟Javascript风格的原型吗?

可以用Java模拟Javascript风格的原型吗?,java,javascript,prototype,Java,Javascript,Prototype,我想知道是否有可能用Java模拟Javascript原型。在Java中是否可以将变量列表与函数相关联?如果可能的话,我想创建一些类似于Javascript原型的东西 下面是一个示例(Javascript): 在Java中有没有类似的方法?是的,这当然是可能的,并且在某些情况下非常有用 通常,您会执行以下操作: 创建一个包含属性映射的类。这将成为所有原型的“基本对象”类。K可能是字符串,V可能是对象 为属性创建getter和setter 可选地添加其他实用程序方法,例如,检查函数是否实现基本上意

我想知道是否有可能用Java模拟Javascript原型。在Java中是否可以将变量列表与函数相关联?如果可能的话,我想创建一些类似于Javascript原型的东西

下面是一个示例(Javascript):


在Java中有没有类似的方法?

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

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

  • 创建一个包含属性映射的类。这将成为所有原型的“基本对象”类。K可能是字符串,V可能是对象
  • 为属性创建getter和setter
  • 可选地添加其他实用程序方法,例如,检查函数是否实现基本上意味着检查属性映射是否包含特定键
  • 通过克隆另一个对象的属性映射或(更复杂的)保留对原始对象的引用来实现基于原型的继承
  • 使用某种类型的函数对象允许在属性中存储任意代码
它不像直接在动态语言中实现这一点那样优雅,但它可以工作并为您带来相同的好处(运行时的灵活性、避免僵硬的OOP约束、快速的属性类型化等)

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


例如,我编写的开源游戏()对所有游戏中的对象都使用这种方法。

Java中的函数(方法)不是一流的公民。不能传递它们或将属性/属性关联到它们。他们必须始终由一个班级护送。您需要一些基于类/对象的设计来实现它,但您的意图是什么?你想做什么?为什么?我使用Javascript中的函数原型来识别函数是否已实现,这样我就可以确定在任何给定时间可以实现哪些函数。(我现在意识到,在Java中,只需创建一个包含我正在使用的每个函数名的数组,就可以完全避免这个问题。)此外,方法注释对于这个目的可能很有用:您能提供一些基本的示例用法吗(我指的是源代码示例)?查看暴君源代码-例如,包含生成具有不同属性和特殊效果(功能对象)的许多不同药剂类型的代码。方法注释也可用于此目的(在某些情况下):
    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"​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​