свойство в 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, время: 08:12. |