【问题标题】:how to use parent constructor? [duplicate]如何使用父构造函数? [复制]
【发布时间】:2023-03-15 23:05:01
【问题描述】:

请帮助解决问题。我有基类“单元”:

var Unit = function() { 
  this.x_coord = x_coord;
  this.y_coord = y_coord;
  this.color = color;
};

和子类“playerUnit”:

var playerUnit = function(gameObj, x_coord, y_coord, color) { 
  Unit.apply(this, arguments);
};

playerUnit.prototype = Object.create(Unit.prototype);

var Game = function(options) {
  new playerUnit(this,1,1,'red');  
};

var app = new Game(); 

我计划在未来做很多这样的子类:'enemyUnit'、'tankUnit'、'boatUnit'等,我需要使用通用属性:x_coord、y_coord、color。

i try use Unit.apply(this, arguments);

但在启动脚本后,我在控制台中有以下错误消息:

Uncaught ReferenceError: x_coord is not defined

jsfiddle:https://jsfiddle.net/vzk73qah/2/

【问题讨论】:

  • 您的父构造函数没有定义任何参数。如果你只做new Unit(…) 也行不通,这与你的子类无关(这很好)。

标签: javascript oop


【解决方案1】:

你应该在Unit中定义参数:

var Unit = function(gameObj, x_coord, y_coord, color) { 
  // ...
};

还要考虑传递一个对象以避免在所有函数中重复这些参数。

var Unit = function(data) { 
  this.x_coord = data.x_coord;
  this.y_coord = data.y_coord;
  this.color = data.color;
};
var playerUnit = function(data) { 
  Unit.call(this, data);
};
new playerUnit({
  gameObj: this,
  x_coord: 1,
  y_coord: 1,
  color: 'red'
});

【讨论】:

  • Unit 不使用gameObj。但这是一个错误的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-21
  • 1970-01-01
  • 2019-08-07
  • 2013-06-23
  • 2011-09-30
  • 1970-01-01
相关资源
最近更新 更多