2017-03-08 65 views
0

我正在研究一个实验的碰撞函数,在我的主代码中我有一个名为Platform的类,我试图将它的X/Y值更改为外部功能。我知道我可以将该函数放入类本身,但我希望能够在不同的类上重用它。JS:使用全局函数更改实例的值

例子:

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); 

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

回答

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); 

集类的原型或使用应用功能

如果类的属性取决于类,你可以使用工厂函数

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