Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 02.04.2012, 00:02
Профессор
Отправить личное сообщение для bot87 Посмотреть профиль Найти все сообщения от bot87
 
Регистрация: 16.05.2011
Сообщений: 307

свойство в 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.Можно объяснить зачем добавлять свойство в прототип и что оно дает.Как оно наследуется?
Ответить с цитированием
  #2 (permalink)  
Старый 02.04.2012, 00:04
х.з
Посмотреть профиль Найти все сообщения от dmitriymar
 
Регистрация: 21.11.2010
Сообщений: 4,588

То,что у созданных объектов вес будет меньше.Они не будут создаваться для каждого нового объекта всякий раз в памяти при вызове конструктора,но объект будет с ними работать-расход памяти меньше

Последний раз редактировалось dmitriymar, 02.04.2012 в 00:07.
Ответить с цитированием
  #3 (permalink)  
Старый 02.04.2012, 01:00
Профессор
Отправить личное сообщение для bot87 Посмотреть профиль Найти все сообщения от bot87
 
Регистрация: 16.05.2011
Сообщений: 307

огромное спасибо
Ответить с цитированием
  #4 (permalink)  
Старый 02.04.2012, 01:20
Профессор
Отправить личное сообщение для bot87 Посмотреть профиль Найти все сообщения от bot87
 
Регистрация: 16.05.2011
Сообщений: 307

как ее почитать??КХорошо излагаеш мысли.
Ответить с цитированием
  #5 (permalink)  
Старый 02.04.2012, 01:26
Профессор
Отправить личное сообщение для bot87 Посмотреть профиль Найти все сообщения от bot87
 
Регистрация: 16.05.2011
Сообщений: 307

А вот эту штуку с this.блаБлаБла = 221
внутри конструктора добавили для пущего выебона, чтобы конструктор обьекты не только с прототипа копировал, а еще и что-то новое добавлял.


Типа общие свойства для клонов задаются в прототипе а функция конструктор делает их особенными?я думал наоборот
Ответить с цитированием
  #6 (permalink)  
Старый 02.04.2012, 01:57
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

да но у прототипов есть огромный на мой взгляд минус, то что у родительский прототипов для всех дочерних конструкторов одни общие приватные переменные. И этот недостаток приводит к тому что на прототипной основе очень сложно делать сложное программное обеспечение. В чем все же ООП намного привлекательнее прототипных наследований.

вот небольшой пример иллюстрирующий то как приватные переменные пересекаются.
// создаем родительский объект с приватной переменной
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 но это уже далеко станет не прототипным наследованием.
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine

Последний раз редактировалось devote, 02.04.2012 в 02:09.
Ответить с цитированием
  #7 (permalink)  
Старый 02.04.2012, 02:13
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

я поправил пример.
Сообщение от Maxmaxmахimus
а приватные свойства нужно именовать как __prop
Будь добр пример мне покажи.
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #8 (permalink)  
Старый 02.04.2012, 02:42
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

Сообщение от Maxmaxmахimus
devote, дело в том что this определяется по форме вызова в зависимости от того что слева от функции через точку.
я вкурсе откуда возникает this и кто/что в него кладут. Ты мне пример покажи реализации того что бы для каждого нового дочернего экземпляра создавались собственные приватные переменные, и не просто имитация приватных свойств, которые все равно можно достать из дочернего элемента, а именно что не на есть приватные. Которые как я сказал будут для каждого экземпляра собственные. Возьмем пример с PHP:
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"
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine

Последний раз редактировалось devote, 02.04.2012 в 02:46.
Ответить с цитированием
  #9 (permalink)  
Старый 02.04.2012, 02:43
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

Сообщение от Maxmaxmахimus
и тут работаешь с ними как обычно, зная что то что начинается с __ это приватные поля. так же желательно исключить их из перечисления и.т.п.
Я так и понял что ты мне паблик предложишь, что не является совсем тем что нужно.
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #10 (permalink)  
Старый 02.04.2012, 02:48
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

Сообщение от Maxmaxmахimus
что это значит?
это значит что ты мне предлагаешь имитировать приватные переменные которые можно достать из любого места, то-есть в любом случае они не приватные а публичные.
Сообщение от Maxmaxmахimus
почему?
потому что это не чистый приват, а имитация.
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Свойства объекта, методы и this. Почему свойство вызывается с () ? jsuse Общие вопросы Javascript 2 04.11.2011 20:39
Объект не поддерживает это свойство или метод load_081112_0953.js 1auto1 Общие вопросы Javascript 1 13.04.2011 22:09
если (свойство css == 2) свойство css = 1; funkypublic Events/DOM/Window 1 09.06.2010 17:39
Prototype v1.4.0 and Prototype v1.5.1_rc3 prihod Prototype & script.aculo.us 2 02.10.2008 16:08
проблема с передачей русского текста в Prototype subaru Prototype & script.aculo.us 2 26.07.2007 16:56