小编Jam*_*s C的帖子

是否可以将相同的构造函数分配给多个类,同时保持对其定义的字段的访问权限?

我在编程语言中的一个小问题是获取在构造函数中传递的参数,并将它们直接分配给类中的字段,命名与我在构造函数中给它们的参数相同,如下所示:

class A {
    constructor(a, b) {
        this.a = a;
        this.b = b;
        etc...
    }
}
Run Code Online (Sandbox Code Playgroud)

为了解决这个问题,我想我可以创建一个函数,该函数采用类中现有的键,以及动态的参数,如下所示:

function test(values) {
      Object.keys(this).map((x,i) => this[x] = values[i]);
}

class ChildObj {
      a1;
      a2;
      constructor() {
          test.call(this, arguments);
      }
}
Run Code Online (Sandbox Code Playgroud)

这很完美,但是,我想通过消除重复的构造函数声明来使它更方便,因为在我的应用程序中,我有很多这样声明的类,并且相同的重复 3 行已经开始代表源代码的重要部分代码。

我的第一直觉是使用继承,但是字段是子对象的属性,因此对父对象不可见。然后我尝试修改类的构造函数,它与所有相关类的数组配对可以动态完成,但是更改类的构造函数似乎不可能,正如我所尝试的

A.constructor = function() {
    test.call(this, arguments);
}

A.prototype.constructor = function() {
    test.call(this, arguments);
}
Run Code Online (Sandbox Code Playgroud)

暂时,我转而尝试将我的对象定义为函数,但这遇到了访问函数参数名称的问题,而这显然只能通过对源代码进行正则表达式处理,而我宁愿避免这种情况。

-----PS:-------

我取得了一些突破,设法通过让父级构造子级的副本将子键传递给父级,但在那里截断递归,如下所示:

A.constructor = function() {
    test.call(this, arguments);
}

A.prototype.constructor = function() {
    test.call(this, arguments);
}
Run Code Online (Sandbox Code Playgroud)

但是,看起来其他东西已经损坏,因为它仍然没有将值分配给结果对象。

-----结束 PS ---------

所以,总结一下:在 Javascript 中是否有可能动态分配这样的构造函数,如果没有,是否有另一种方法可以使用像这样的普通构造函数创建对象?谢谢你。

javascript

5
推荐指数
1
解决办法
70
查看次数

使用 Plots.jl 有效地动画子图

我正在尝试使用 Plots.jl 和 GR 后端在 Julia 中创建一个带有三个子图(一个表面,两个热图)的动画。到目前为止,我的代码中最慢的部分是这些图的生成,所以我试图找到最有效的方法来做到这一点。

我试过重新调用动画循环内的绘图,但这比原地修改要慢得多:

using Plots,Profile

function mcve(n)
    A = rand(n,100,100)
    B = rand(n,100,100)

    l = @layout [ a b ; c]
    p1 = surface(1:100,1:100,A[1,:,:],clims=(0,1),legend=false)
    p2 = heatmap(A[1,:,:],clims=(0,1),aspect_ratio=1,legend=false)
    p3 = heatmap(B[1,:,:],aspect_ratio=1)
    p = plot(p1,p2,p3,layout = l)

    anim = @animate for i=1:n
        surface!(p[1],1:100,1:100,A[i,:,:])
        heatmap!(p[2],A[i,:,:])
        heatmap!(p[3],B[i,:,:])
    end
    gif(anim,"example.gif")
end

mcve(1)
@profile mcve(10)
Profile.print()
Run Code Online (Sandbox Code Playgroud)

跟踪结果 https://pastebin.com/Lv9uCLE5

根据分析器,将近一半的运行时间花费在调用 ac 库的函数“setcharheight”上。有没有办法减少我需要拨打的电话次数?

julia plots.jl

3
推荐指数
1
解决办法
502
查看次数

标签 统计

javascript ×1

julia ×1

plots.jl ×1