0

Я изо всех сил пытаюсь установить экземпляр протипа. У меня есть что-то вроде этого:Невозможно установить экземпляр прототипа с использованием прототипа = в javascript

function Course() { 
    // Some stuff 
} 

Course.prototype.MyMethod = function() { 
    // Do stuff 
} 

Теперь, если я создаю New Course(), все работает отлично, однако, я получаю курсы от JSON. Так что я хотел бы сделать, это:

data.forEach(function(courseFromJSON) { 
    courseFromJSON.prototype = Course.prototype; 
    courseFromJSON.prototype = new Course(); // Doesn't work either 
}); 

Но мои курсы никогда не получить набор метод MyMethod к ним. Также не устанавливается courseFromJSON.prototype по номеру new Course(). Я прохожу через видео Дугласа Крокфорда, но, похоже, все не так. Что я делаю не так?

Спасибо.

+0

http://stackoverflow.com/questions/7015693/how-to-set-the-prototype -of-a-javascript-object-that-has-already-was-instantiat – Vandesh

+0

Спасибо @Vandesh, я прочитал, что код использует .prototype = что-то, что я и пытался. Но в нем также говорится, что он отражает только дочерние экземпляры. Вопрос остается: как мне заставить мои прототипы работать над материалом, поступающим из JSON? –

+0

ОК, поэтому курсFromJSON .__ proto__ = Course.prototype, похоже, работает –

ответ

1

Ваш код не работал, потому что вы не можете изменить прототип уже созданного объекта или, по крайней мере, не через свойство prototype. существует

две альтернативы:

  1. Используйте внутреннюю __proto__ свойства, но это не рекомендуется, потому что это нестандартное свойство.

  2. Используйте функцию setPrototypeOf(Object, prototype), рекомендуется и стандартизоваться в ES6.

Или еще лучше, использовать фрагмент кода, взятый из ссылки документации на setPrototypeOf():

Object.setPrototypeOf = Object.setPrototypeOf || function (obj, proto) { 
    obj.__proto__ = proto; 
    return obj; 
} 
+0

Спасибо, особенно за рекомендацию по использованию какого-либо варианта. –

+0

@spike Добро пожаловать, рад, что смогу помочь. –

Смежные вопросы