gpt4 book ai didi

javascript - 具有现代 ES6 javascript 类的方法的局部临时变量

转载 作者:行者123 更新时间:2023-11-30 20:26:53 25 4
gpt4 key购买 nike

在旧式 javascript 类中,您可以使用 IIFE为方法定义一些临时变量,这些变量是预先分配的,因此不必在每次调用方法时都调用 new

// constructor
var MyClass = function(x,y,z){ this.pos=new vec3(x,y,z); }

// method
MyClass.prototype.vec_combine = ( function( a,b,c, up,fw) {
var side = new vec3(); // allocated at construction, not at invocation
return function vec_combine( a,b,c, up,fw) {
cross_product( up,fw, side ); // side is perpendicular to up,fw
side.normalize();
this.pos.x = fw.x*a + up.x*b + side.x*c;
this.pos.y = fw.y*a + up.y*b + side.y*c;
this.pos.z = fw.z*a + up.z*b + side.z*c;
}
}() );

如何使用类似现代 ES6 的类来做到这一点?

class MyClass{
constructor(x,y,z){ this.pos=new vec3(x,y,z); }

// method
vec_combine( a,b,c, up,fw) {
var side = new vec3(); // I don't want do "new" each invocation
cross_product( up,fw, side ); // side is perpendicular to up,fw
side.normalize();
this.pos.x = fw.x*a + up.x*b + side.x*c;
this.pos.y = fw.y*a + up.y*b + side.y*c;
this.pos.z = fw.z*a + up.z*b + side.z*c;
}
}

最佳答案

你不能按照你的要求去做。

但是,如果您已经在使用 ES6,那么您很可能正在使用模块。您也可以在模块中有一个未导出的变量。

// Not exported
var side = new vec3(); // I don't want do "new" each invocation

export class MyClass{
constructor(x,y,z){ this.pos=new vec3(x,y,z); }

// method
vec_combine( a,b,c, up,fw) {
cross_product( up,fw, side ); // side is perpendicular to up,fw
side.normalize();
this.pos.x = fw.x*a + up.x*b + side.x*c;
this.pos.y = fw.y*a + up.y*b + side.y*c;
this.pos.z = fw.z*a + up.z*b + side.z*c;
}
}

如果你不使用模块,你可以把整个类放在一个 IIFE 中

const MyClass =  (() => {
var side = new vec3(); // I don't want do "new" each invocation

return class {
constructor(x,y,z){ this.pos=new vec3(x,y,z); }

vec_combine( a,b,c, up,fw) {
cross_product( up,fw, side ); // side is perpendicular to up,fw
side.normalize();
this.pos.x = fw.x*a + up.x*b + side.x*c;
this.pos.y = fw.y*a + up.y*b + side.y*c;
this.pos.z = fw.z*a + up.z*b + side.z*c;
}
}

});

关于javascript - 具有现代 ES6 javascript 类的方法的局部临时变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50800570/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com