code: function(self, prefix, setter, vector) {
      var publicX = prefix + "x",
          publicY = prefix + "y",
          privateX = "_" + publicX,
          privateY = "_" + publicY;
  
      if (setter) {
          Crafty.defineField(
              vector,
              "x",
              function() {
                  return self[privateX];
              },
              function(v) {
                  self[publicX] = v;
              }
          );
          Crafty.defineField(
              vector,
              "y",
              function() {
                  return self[privateY];
              },
              function(v) {
                  self[publicY] = v;
              }
          );
      } else {
          Crafty.defineField(
              vector,
              "x",
              function() {
                  return self[privateX];
              },
              function(v) {}
          );
          Crafty.defineField(
              vector,
              "y",
              function() {
                  return self[privateY];
              },
              function(v) {}
          );
      }
      if (Object.seal) {
          Object.seal(vector);
      }
  
      return vector;
  }
docs: This defines an alias for a pair of underlying properties which represent the components of a vector It takes an object with vector methods, and redefines its x/y properties as getters and setters to properties of self This allows you to use the vector's special methods to manipulate the entity's properties, while still allowing you to manipulate those properties directly if performance matters