непонятно поведение prototype

116
23 ноября 2020, 15:00

почему код срабатывает лишь в третьем случае

var Army = function(units){ 
  var group = {units:units}; 
  group.prototype.attack = function(){ 
    console.log("army is attack"); 
  }; 
  return group; 
} 
var a = new Army(); 
a.attack(); 
//Uncaught TypeError: Cannot set property 'attack' of undefined 
//    at new Army (<anonymous>:3:25)

var Army = function(units){ 
  var group = function(){this.units=units;}; 
  group.prototype.attack = function(){ 
    console.log("army is attack"); 
  }; 
  return group; 
} 
var a = new Army(); 
a.attack(); 
//Uncaught TypeError: a.attack is not a function

var Army = function(units){ 
	var group = function(){this.units=units;}; 
	group.prototype.attack = function(){ 
		console.log("army is attack"); 
	}; 
	return new group(); 
} 
var a = new Army(); 
a.attack(); 
// army is attack

Answer 1
  1. У объекта group нет свойства prototype, поскольку свойство prototype - это свойство конструкторов.
  2. Теперь group содержит конструктор, однако и возвращаете вы сам конструктор, а не объект при его помощи сконструированный. Следовательно и обращаться к методу attack нужно как a.prototype.attack, а не a.attack.
  3. А вот в последнем случае все верно, потому что group - конструктор, и возвращая new group() вы вызываете этот конструктор, следовательно, возвращаете сконструированный им объект, который позволяет через прототип обратиться к методу attack.
READ ALSO
select на всю оставшуюся ширину

select на всю оставшуюся ширину

Есть контейнер фиксированной шириныВ нем нужно расположить 3 элемента:

102
Игра - 15 палок. Не могу определить проблему

Игра - 15 палок. Не могу определить проблему

Не знаю как это игра называется на самом деле, но нужно было реализовать это: Реализовать игру 15 палокВы играете с компьютером

133
Удаление созданных с помощью new объектов

Удаление созданных с помощью new объектов

Народ, прошу помощиВроде простой вопрос, но ничего полезного при поиске решения не нашел

118