Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #31 (permalink)  
Старый 24.08.2009, 18:30
Аватар для JSprog
L
Отправить личное сообщение для JSprog Посмотреть профиль Найти все сообщения от JSprog
 
Регистрация: 16.08.2009
Сообщений: 416

Как ты меня бесишь Влад. Думаешь я об этом не знаю? Я использую такую терминологию чтобы было понятней. И сам иди делай что-нибудь. Вот уж кто точно быдлокодер
__________________
Лови позитив

Последний раз редактировалось JSprog, 24.08.2009 в 18:33.
Ответить с цитированием
  #32 (permalink)  
Старый 24.08.2009, 18:30
Аватар для B~Vladi
Модератор Всея Форума
Отправить личное сообщение для B~Vladi Посмотреть профиль Найти все сообщения от B~Vladi
 
Регистрация: 14.05.2009
Сообщений: 4,021

Сообщение от Dmitry A. Soshnikov
А если бы было с new?
Тогда fnc использовалась как конструктор и this указывал бы на вновь созданный объект оператором new. Соответственно z присваевалось бы ему. Опять же - всё зависит от того откуда эту функцию вызывать.
Ответить с цитированием
  #33 (permalink)  
Старый 24.08.2009, 18:41
Профессор
Отправить личное сообщение для Dmitry A. Soshnikov Посмотреть профиль Найти все сообщения от Dmitry A. Soshnikov
 
Регистрация: 25.02.2008
Сообщений: 707

JSprog, B~Vladi, выделяйте цитату на которую отвечаете, так удобней.

Сообщение от JSprog
Связь с конструктором так как дочерние объекты не копируют свойство а тольок "читают" его
А если конструктор удалить? Или присвоить null? Объект сможет обратиться к этой свойству в .prototype? Вроде как, да.

function A() {}
A.prototype.z = 10;
var a = new A();
A.prototype = null;
a.constructor = null;
A = null;
alert(a.z); // 10 ?


Почему так? Ведь конструктор и .prototype уже null. И объект "а" уже потерял связь с ним - .constructor тоже null.

Сообщение от B~Vladi
В JavaScript нет классов
А там другая терминология какая-то? Расскажи подробней.

Сообщение от B~Vladi
JSprog, харош уже, давай что-нибудь уже делай...
Сообщение от JSprog
Как ты меня бесишь Влад. Думаешь я об этом не знаю? Я использую такую терминологию чтобы было понятней. И сам иди делай что-нибудь. Вот уж кто точно быдлокодер

B~Vladi, JSprog, парни, ну мы ж, вроде, договорились. Забейте, нас щас не это интересует (меня больше вы так хорошо рассказываете, а спускаетесь до выяснения отношений. Всё, забили).
__________________
Тонкости ECMAScript

Последний раз редактировалось Dmitry A. Soshnikov, 24.08.2009 в 18:43.
Ответить с цитированием
  #34 (permalink)  
Старый 24.08.2009, 18:45
Аватар для JSprog
L
Отправить личное сообщение для JSprog Посмотреть профиль Найти все сообщения от JSprog
 
Регистрация: 16.08.2009
Сообщений: 416

Сообщение от Dmitry A. Soshnikov
А если конструктор удалить? Или присвоить null? Объект сможет обратиться к этой свойству в .prototype? Вроде как, да.
Ну дак а прототип останетса
__________________
Лови позитив
Ответить с цитированием
  #35 (permalink)  
Старый 24.08.2009, 18:49
Профессор
Отправить личное сообщение для Dmitry A. Soshnikov Посмотреть профиль Найти все сообщения от Dmitry A. Soshnikov
 
Регистрация: 25.02.2008
Сообщений: 707

Сообщение от JSprog
Ну дак а прототип останетса
Каким образом?
__________________
Тонкости ECMAScript
Ответить с цитированием
  #36 (permalink)  
Старый 24.08.2009, 18:51
Аватар для JSprog
L
Отправить личное сообщение для JSprog Посмотреть профиль Найти все сообщения от JSprog
 
Регистрация: 16.08.2009
Сообщений: 416

Ошибся
Метод экземпляра может быть вызван для любого экземпляра класса, но это не значит, что каждый объект содержит собственную копию метода, как в случае свойства экземпляра.
Вместо этого каждый метод экземпляра совместно используется всеми экземплярами класса
В JavaScript мы определяем метод экземпляра класса путем присваивания функции свойству объекта прототипа в
конструкторе.
Это касаетса только методов
Сообщение от Dmitry A. Soshnikov
вы так хорошо рассказываете,
Плюсик бы поставил тогда=)
__________________
Лови позитив

Последний раз редактировалось JSprog, 24.08.2009 в 18:57.
Ответить с цитированием
  #37 (permalink)  
Старый 24.08.2009, 19:06
Профессор
Отправить личное сообщение для Dmitry A. Soshnikov Посмотреть профиль Найти все сообщения от Dmitry A. Soshnikov
 
Регистрация: 25.02.2008
Сообщений: 707

Сообщение от JSprog
Ошибся
В чём?

Сообщение от JSprog
Метод экземпляра может быть вызван для любого экземпляра класса, но это не значит, что каждый объект содержит собственную копию метода, как в случае свойства экземпляра. Вместо этого каждый метод экземпляра совместно используется всеми экземплярами класса
А, т.е. в этом случае:

function A(x) {
  this.x = x;
  this.getX = funciton () {
    return this.x;
  };
}

var a = new A(10);
var b = new A(20);

alert(a.getX()); // 10
alert(b.getX()); // 20


Объекты "а" и "b" будут иметь разное свойство "x", но одинаковый для обоих метод .getX? Или я не так понял?

Сообщение от JSprog
В JavaScript мы определяем метод экземпляра класса путем присваивания функции свойству объекта прототипа в
конструкторе.
Это касаетса только методов
Или ты имел в виду, когда метод описан в прототипе, только тогда он расшаривается между всеми экземплярами? А почему касается только методов? В чём тогда отличие от свойств? Свойство же тоже можно разместить в прототипе.

Сообщение от JSprog
Плюсик бы поставил тогда=)
А я ещё не полностью разобрался

В частности, не было объяснено, каким образом объект общается с прототипом, если A.prototype уже null? И, если, всё-таки, конструктор и .prototype могут быть null, то получается, это:

Сообщение от JSprog
Связь с конструктором так как дочерние объекты не копируют свойство а тольок "читают" его
не верно? Получается, объект связан с конструктором лишь на момент создания конструктором этого объекта. Дальше конструктор может быть уничтожен, так? Или я недопонял?
__________________
Тонкости ECMAScript

Последний раз редактировалось Dmitry A. Soshnikov, 24.08.2009 в 19:08.
Ответить с цитированием
  #38 (permalink)  
Старый 24.08.2009, 19:12
Аватар для JSprog
L
Отправить личное сообщение для JSprog Посмотреть профиль Найти все сообщения от JSprog
 
Регистрация: 16.08.2009
Сообщений: 416

Сообщение от Dmitry A. Soshnikov
В чём?
В том что свойства из прототипа просто читаютса
Сообщение от Dmitry A. Soshnikov
Объекты "а" и "b" будут иметь разное свойство "x", но одинаковый для обоих метод .getX?
Именно
Сообщение от Dmitry A. Soshnikov
А почему касается только методов?
Думаю так заложенно на уровне синатксиса языка. Ведь зачем копировать метода на всех? Это отнимает много памяти да и редко методы менять приходитса в экземплярах.
Сообщение от Dmitry A. Soshnikov
В чём тогда отличие от свойств?
Методы это тоже свойства которые содержат функцию.
Сообщение от Dmitry A. Soshnikov
Связь с конструктором так как дочерние объекты не копируют свойство а тольок "читают" его
Верно только для методов
__________________
Лови позитив
Ответить с цитированием
  #39 (permalink)  
Старый 24.08.2009, 19:24
Профессор
Отправить личное сообщение для Dmitry A. Soshnikov Посмотреть профиль Найти все сообщения от Dmitry A. Soshnikov
 
Регистрация: 25.02.2008
Сообщений: 707

JSprog, подожди, тут я уже начал путаться.

Сообщение от JSprog
В том что свойства из прототипа просто читаютса
А что ещё можно с ними делать? Вероятно, не только читать из прототипа, но и записывать туда. И свойства и методы, да?

Сообщение от JSprog
Именно
А почему тогда в данном случае .hasOwnProperty выдаёт true?

function A(x) {
  this.x = x;
  this.getX = funciton () {
    return this.x;
  };
}
 
var a = new A(10);
var b = new A(20);

// ну тут понятно
alert(a.hasOwnProperty('x')); // true
alert(b.hasOwnProperty('x')); // true

// а здесь почему, если ты говоришь, что
// метод getX - один на оба объекта
alert(a.hasOwnProperty('getX')); // true
alert(b.hasOwnProperty('getX')); // true


Сообщение от JSprog
Ведь зачем копировать метода на всех? Это отнимает много памяти да и редко методы менять приходитса в экземплярах.
Логично, но почему тогда .hasOwnProperty('getX') для обоих объектов выдало true? Есть ли какой-нибудь способ, чтобы метод .getX действительно был один на оба объекта? Сейчас получается, что оба из них имеют две разные функции, но выполняющие одно и тоже. Реально, не очень выгодно по ресурсам.

Сообщение от JSprog
Методы это тоже свойства которые содержат функцию.
Ну я понимаю, т.е. и свойства и методы можно хранить в прототипе и тогда эти свойства и методы будут одними и теми же на все экземпляры, так? Или не так?

Сообщение от JSprog
Верно только для методов
Можешь показать на примере, не очень понял. Почему свойства так обделены?
__________________
Тонкости ECMAScript
Ответить с цитированием
  #40 (permalink)  
Старый 24.08.2009, 19:34
Аватар для JSprog
L
Отправить личное сообщение для JSprog Посмотреть профиль Найти все сообщения от JSprog
 
Регистрация: 16.08.2009
Сообщений: 416

Сообщение от Dmitry A. Soshnikov
И свойства
и всё...
Сообщение от Dmitry A. Soshnikov
. Почему свойства так обделены?
Свойста часто изменяюса и меньше весят
Сообщение от Dmitry A. Soshnikov
но почему тогда .hasOwnProperty('getX') для обоих объектов выдало true
У меня твой код вообще не работает
FireBug выдаёт ошибку на 4 строке
this.prototype.getX = funciton () {\n
__________________
Лови позитив
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подскажите, есть ли такая CMS greatilya Оффтопик 1 01.08.2009 21:05
глюк форума Gvozd Сайт Javascript.ru 11 18.03.2009 14:37
document.XMLDocument - есть ли в FF? IIIEPJIOK Events/DOM/Window 0 26.02.2009 00:19
Одиночки. В чем разница? Snipe Общие вопросы Javascript 49 07.06.2008 15:58
есть ли global в javascript scuter Общие вопросы Javascript 21 11.04.2008 21:48