首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Groovy原型对象

Groovy原型对象
EN

Stack Overflow用户
提问于 2010-02-24 12:40:22
回答 3查看 887关注 0票数 1

我有一个带有传入变量的方法,它表示一个脚本。

例如:

hello.groovy

代码语言:javascript
复制
Foo.init(this)

Foo.groovy

代码语言:javascript
复制
class Foo {
    static init(app) {

    }
}

向初始化方法中的app变量添加大量新功能的最佳方式是什么?基本上,我想将另一个对象的所有功能添加到app对象中。

例如,如果我有另一个类:

代码语言:javascript
复制
class Bar {
    def a() { }

    def b() {

    }
}

我希望app对象基本上是一个new Bar()。在JavaScript中,使用prototype对象很容易做到这一点,但在groovy中似乎无法让它工作。实现这一目标的最佳方法是什么?或者我应该做一些不同的事情?

EN

回答 3

Stack Overflow用户

发布于 2010-10-05 06:56:44

YourClass.metaClass.static.yourMethod是我在Groovy中见过的与JS原型最相似的一个。请查看此链接:

Groovy meta-programming - adding static methods to Object.metaClass

干杯。

票数 1
EN

Stack Overflow用户

发布于 2010-02-24 12:48:59

有几种方法可以做到这一点,每种方法都有优缺点。在Groovy文档页面上,关于Dynamic Groovy的部分说明了其中的几个。如果我理解正确的话,最简单的方法是只使用实例的metaClass来添加新功能,例如:

代码语言:javascript
复制
class Foo {
  static void init (a) {
    a.metaClass.a = { println "a()"; }
    a.metaClass.b = { println "b()"; } 
  }
}

def myObject = new Object();
Foo.init (myObject);

myObject.a();
myObject.b();
票数 0
EN

Stack Overflow用户

发布于 2010-02-24 22:03:47

要做到这一点,最简单的方法是使用混入。基本上,您可以在app的类上调用mixin,并将其传递给另一个类,以将该功能合并到其中。

我已经修改了您的示例,以便在Bar类中显示这种混合。

代码语言:javascript
复制
class Foo {
    static init(app) {
        app.class.mixin Bar
    }
}

class Bar {
    def a() { println "a called" }

    def b() {
        println "b called"
    }
}

def app = new Object()
Foo.init(app)
app.a()
app.b()

它的输出将是:

名为b的

a称为

在本例中,我将Bar添加到Object类中,但您可以将它添加到应用程序中的任何类中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2323699

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档