Use Of This Javascript
Solution 1:
I would rewrite this like so:(based on your comments)
var Vector = function(){
}
Vector.prototype.add = function(someVector2){
    var tmpVector = new Vector;
    tmpVector.x =  this.x + someVector2.x;
    tmpVector.y = this.y + someVector2.y;
    return tmpVector;
}
Then you could invoke it like so:
var someVector = new Vector();
var addedVector = someVector.add(someVector);
The above would store a new Vector in addedVector that would have an x and y value double that of someVector.
Solution 2:
New objects are only declared in very explicit ways; "new Vector()", or "variable = {x:5, y:2}", etc. Whenever you write "something = somethingElse", no new objects are going to be created. You can even confirm this using the triple-equals comparator.
v1 = new Vector(1, 2);
v2 = new Vector(1, 2);
v1 === v2 // will return false
v3 = v1;
v1 === v3 // will return true
v1.x = 17;
v3.x // will return 17
For ease of development, you might define a Vector prototype function "clone", that creates and returns a "new Vector()" with the same x and y as the original. If you want a new one for add()'s return, you'll need to do something like that.
Also: ryan's answer is tangentially correct - you should only define prototype functions once, not every time a Vector is created.
Solution 3:
Below is how I would write it. It also has a trick I read about from David Herman for making your constructors new agnostic. This means you don't necessarily have to make a new Vector with the new keyword.
function Vector(x,y) {
  // Make the constructor `new` agnostic
  if (!(this instanceof Vector)) {
    return new Vector(x,y);
  }
  this.x = x;
  this.y = y;
  return this;
}
Vector.prototype.add = function(someVector2) {
  this.x += someVector2.x;
  this.y += someVector2.y;
  return this;
};
// Example
var myVector = new Vector(1,2);
var myOtherVector = Vector(1,2);
myVector.add(myOtherVector);
Post a Comment for "Use Of This Javascript"