Вопрос по прототипу
Здравствуйте! Подскажите в чем разница.
Код 1 function cyl(l, d){ this.lenght2 = l; this.diametr = d; this.area = function(){return this.lenght2 * this.diametr} } var a = new cyl(10, 3); var b = new cyl(12, 4); document.write(a.area() + " " + b.area()); Код 2 function cyl(l, d){ this.lenght2 = l; this.diametr = d; } cyl.prototype.area = function(){return this.lenght2 * this.diametr} var a = new cyl(10, 3); var b = new cyl(12, 4); document.write(a.area() + " " + b.area()); Не совсем понимаю в чем разница( Читаю раздел прототипы и наследование,Фленагана. Только не могу сообразить что автор имеет ввиду в этом абзаце по этой теме Но свойство area каждого отдельно взятого объекта Rectangle(у меня cyl) всегда будет ссылаться на одну и ту же функцию (разумеется, это свойство можно изменить в процессе работы, но, как правило, предполагается, что методы объекта не должны меняться). Применение отдельных свойств для хранения методов объектов, которые могли бы совместно использоваться всеми экземплярами одного и того же класса, – это достаточно неэффективное решение. Однако и эту проблему можно решить. Оказывается, все объекты в JavaScript содержат внутреннюю ссылку на объект, известный как прототип. |
В первом коде у каждого экземпляра есть своя функция area. И если бы их было 100, то и функций area было бы тоже сто. И поскольку функция делает одно и тоже, просто с разными значениями, ее выносят в прототип. И она теперь одна хоть для 100000 экземпляров
|
Sweet, тогда это влияет еще на размер объекта?
|
Это влияет на количество создаваемых функций. Размер объекта -- это что-то эфемерное.
|
Благодарю!
|
Часовой пояс GMT +3, время: 02:54. |