свойство в prototype
function Animal(name) { this.name = name; } Animal.prototype.eats = true; Animal.prototype.run = function() { this.eats = false; alert(this.name + ' бежит!'); }; var animal = new Animal('Зверь'); // (1) animal.run(); меня интересует prototype.eats.Можно объяснить зачем добавлять свойство в прототип и что оно дает.Как оно наследуется? |
То,что у созданных объектов вес будет меньше.Они не будут создаваться для каждого нового объекта всякий раз в памяти при вызове конструктора,но объект будет с ними работать-расход памяти меньше
|
огромное спасибо
|
как ее почитать??КХорошо излагаеш мысли.:)
|
А вот эту штуку с this.блаБлаБла = 221
внутри конструктора добавили для пущего выебона, чтобы конструктор обьекты не только с прототипа копировал, а еще и что-то новое добавлял. Типа общие свойства для клонов задаются в прототипе а функция конструктор делает их особенными?я думал наоборот:blink: |
да но у прототипов есть огромный на мой взгляд минус, то что у родительский прототипов для всех дочерних конструкторов одни общие приватные переменные. И этот недостаток приводит к тому что на прототипной основе очень сложно делать сложное программное обеспечение. В чем все же ООП намного привлекательнее прототипных наследований.
вот небольшой пример иллюстрирующий то как приватные переменные пересекаются. // создаем родительский объект с приватной переменной var Parent = (function() { var a = "test"; // наша приватная переменная var Fn = function() {} // публичные методы Fn.prototype.changeTest = function() { a = "new value"; } Fn.prototype.show = function() { alert( a ); } return Fn; })(); // дочерний конструктор, который наследует Parent function Child() {} function F(){} F.prototype = Parent.prototype; Child.prototype = new F(); Child.prototype.constructor = Child; var q = new Child(); // создаем один экземпляр Child var w = new Child(); // создаем второй экземпляр Child q.show(); // отобразим текущее приватное значение q.changeTest(); // сменим приватную переменную w.show(); // отобразим приватную переменную через другой экземпляр.Результат того что для каждого экземпляра нужно пересоздавать приватные переменные. Конечно же это можно обойти в JavaScript но это уже далеко станет не прототипным наследованием. |
я поправил пример.
Цитата:
|
Цитата:
class Parent { private var $variable = "lalalala"; public function setPrivate( $val ) { $this->variable = $val; } public function getPrivate() { return $this->variable; } } class Child1 extends Parent { } class Child2 extends Parent { } $child1 = new Child1(); $child2 = new Child2(); echo $child1->getPrivate(); // выведет "lalalala" $child1->setPrivate( 'new value' ); echo $child1->getPrivate(); // выведет "new value" echo $child2->getPrivate(); // выведет "lalalala" |
Цитата:
|
Цитата:
Цитата:
|
Часовой пояс GMT +3, время: 06:14. |