JS:使用全局函数更改实例的值

时间:2017-03-08 23:59:48

标签: javascript collision

我正在为一个实验开发碰撞函数,在我的主代码中我有一个名为Platform的类,我试图用外部函数改变它的X / Y值。我知道我可以将函数放在类本身中,但我希望能够在不同的类中重用它。

示例:

function changeX(x) {
    x += 20;
  return x;
}

class Box {
    constructor(posX) {
    this.posX = posX;
  };

  change() {
    changeX(this.posX);
  }
};

const box1 = new Box(20);
var box2 = new Box(40);

console.log("Pre Function Call:");
console.log("Box 1: " + box1.posX);
console.log("Box 2: " + box2.posX);

changeX(box1.posX);
box2.change();

console.log("");
console.log("Post Function Call:")
console.log("Box 1: " + box1.posX);
console.log("Box 2: " + box2.posX);

我一直在寻找方法来做到这一点但没有出现。

1 个答案:

答案 0 :(得分:0)

function changeX() {
    this.posX += 20;
}

class Box {
    constructor(posX) {
        this.posX = posX;
    }
};

Box.prototype.change = changeX;



const box1 = new Box(20);
var box2 = new Box(40);

console.log("Pre Function Call:");
console.log("Box 1: " + box1.posX);
console.log("Box 2: " + box2.posX);
changeX.apply(box1);
box2.change();

console.log("");
console.log("Post Function Call:")
console.log("Box 1: " + box1.posX);
console.log("Box 2: " + box2.posX);

设置Class的原型或使用apply函数

如果类的属性依赖于类,则可以使用工厂函数

function changeX(attr) {
    return (function (){
        this[attr] += 20;
    }).bind(this)
}
Box.prototype.change = changeX('posX');