Я использовал JS для написания самодовольных объектно-ориентированных методов. Я столкнулся с проблемой, которая должна определить метод следующим образом:
Кода -копия выглядит следующим образом:
Функция ListCommon2 (первая, вторая, третья)
{
this.first = function ()
{
оповещение ("First DO"+первым);
}
}
ListCommon2.do1 = function (первая)
{
// this.first ();
оповещение ("First DO"+первым);
}
ListCommon2.prototype.do2 = function (первая)
{
// this.first ();
оповещение ("First DO"+первым);
}
В чем разница между двумя методами? Какова функция использования прототипа или нет?
Тестовый код:
Кода -копия выглядит следующим образом:
var t1 = new ListCommon2 («Wrough Water 1», «Braw Tea 1», «Drink 1»);
// t1.do1 (); // Ошибка произошла при вызове
ListCommon2.do1 («кипяченая вода 1»);
var t2 = new listcommon2 («кипящая вода 2», «купить чай 2», «напиток 2»);
t2.do2 ("кипящая вода 2"); //
// listCommon2.do2 ("кипящая вода 1"); // Ошибка произошла в вызове
После тестирования было обнаружено, что метод, который не использовал прототип, эквивалентен статическому методу класса, поэтому он может быть вызван таким образом, ListCommon2.do1 («кипящая вода 1»);, если это вызвано таким образом, возникнет ошибка, t1.do1 ();
Напротив, метод с использованием прототипа эквивалентен методу экземпляра класса и не может использоваться после нового. ListCommon2.do2 ("кипящая вода 1"); Это вызовет ошибку.
Вывод: метод, определенный с использованием прототипа, эквивалентен методу экземпляра класса и должен использоваться после нового. Ограничения функции, которая может быть вызвана в функции, также будут аналогичны ограничениям метода экземпляра класса.
Использование методов, определенных без использования прототипа, эквивалентно статическим методам класса. Вы можете использовать их напрямую без нового. Ограничения функций, которые можно назвать в функциях, также будут аналогичны ограничениям статических методов класса.
Например, это. First () не может быть вызван;