Очень простое наследование Javascript - PullRequest
1 голос
/ 31 января 2012

Мне нужна суперчитаемая версия этого супер простого наследования в JavaScript. Это некоторый автоматически сгенерированный код, где я не могу позволить себе использовать внешние функции или библиотеки.

Что я действительно хочу, так это то, что Point3d «наследует» от Point, я хочу что-то вроде этого:

function Point(x,y) {
  this.x = x;
  this.y = y;
}

function Point3d(x,y,z) {
  Point(x, y);
  this.z = z;
}

За исключением того, что это на самом деле не работает:

var pt = new Point3d(230,30,11);
// but x and y are in global scope, they should be in pt.x and pt.y :(

Один из возможных вариантов - дублировать все элементы в генерации кода - но поскольку Javascript основан на прототипах, я мог бы предположить, что это легко сделать правильно (если бы я действительно знал Javascript)

Спасибо

Ответы [ 2 ]

8 голосов
/ 31 января 2012

Примените конструктор Point к объекту Point3d, используя .call().

function Point3d(x,y,z) {
  Point.call(this, x, y);
  this.z = z;
}

http://jsfiddle.net/MSfu5/

Метод .call устанавливает значение this в вызываемой вами функции.

Здесь мы устанавливаем новый создаваемый объект Point 3d.


Если в прототипе Point есть что-то, что Point3d должно наследовать, вы можете сделать объект Point3d.prototype пустым экземпляром Point.

1 голос
/ 31 января 2012

Для начала нужно создать объект.

function Point(x,y) {
  return { x: x, y: y }
}

function Point3d(x,y,z) {
  var self=new Point(x, y);
  self.z=z;
  return self;
}
var pt = new Point3d(230,30,11);
...