Недавно я начал изучать Javascript, поскольку я отправляюсь из мира Java. Я получил эту книгу под названием JavaScript The Definitive guide.. Сейчас я немного запутался в прототипах и наследовании. Я хочу знать, в чем разница между установкой функции в свойство объекта и прототипом функций. Из книги, например:Prototypes and Inheritance
function Rectangle(w, h) {
this.width = w;
this.height = h;
this.area = function() { return this.width * this.height; }
}
С этой новой версии конструктора, вы можете написать код так:
// How big is a sheet of U.S. Letter paper in square inches?
var r = new Rectangle(8.5, 11);
var a = r.area();
Это решение работает лучше, но по-прежнему не является оптимальным (почему). Каждый созданный прямоугольник будет иметь три свойства (да, и что?). Свойства ширины и высоты могут быть разными для каждого прямоугольника , но область каждого отдельного объекта Rectangle всегда относится к той же функции (кто-то может ее изменить, конечно, но вы обычно намереваетесь методы объекта, который будет постоянным). Неэффективно использовать регулярные свойства для методов , предназначенных для совместного использования всеми объектами того же класса (ПОЧЕМУ В чем проблема?) (То есть все объекты , созданные с тем же конструктором).
Почему вниз голосов? – Jason
В этом случае я должен определить область как прототип: Rectangle.prototype.area = function() ... Таким образом, все Recangle используют одну и ту же функцию, поскольку область вычисления всегда одинакова для Rectangle, это хорошо. когда с или с изменением высоты, зона вызова гарантирует, что всегда возвращает правильное значение. Вы можете установить область при создании объекта, но тогда вам нужно будет создать геттеры и настройки для обеих областей и высоты, чтобы перечислить область при изменении любого из них. – HMR
Если вы хотите понять, как работает прототип, и как создавать экземпляры объектов из функций, чем пытаться запустить этот код: http://stackoverflow.com/questions/16063394/prototypical-inheritance-writing-up/16063711#16063711 Я предлагаю использовать Firefox с плагином Firebug или Chrome, вы можете копировать и вставлять код в консоль и запускать его без перезагрузки страниц каждый раз. – HMR