Javascript.RU

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

И как сделать чтобы вывелся результат работы функции?
__________________
Лови позитив
Ответить с цитированием
  #52 (permalink)  
Старый 24.08.2009, 20:54
Профессор
Отправить личное сообщение для Dmitry A. Soshnikov Посмотреть профиль Найти все сообщения от Dmitry A. Soshnikov
 
Регистрация: 25.02.2008
Сообщений: 707

Сообщение от JSprog
A.prototype.getX=function(){return 15}
Ну вот, а говоришь, что нельзя методы хранить в прототипе. Оказывается, можно. Более того, теперь:

alert(a.hasOwnProperty('getX')); // false
alert(b.hasOwnProperty('getX')); // false


и, что самое важное:

alert(a.getX === b.getX); // true. Теперь это один и тот же метод.


Я думаю, ты именно об этом говорил.

Сообщение от JSprog
alert(a.isPrototypeOf('x'));//false
Сообщение от JSprog
alert(a.isPrototypeOf('getX'));
Это не понятно, вероятно, имелось в виду:

A.prototype.isPrototypeOf(a); // true


Сообщение от JSprog
И как сделать чтобы вывелся результат работы функции?
Вызвать её, указав выражение вызова (Call-expression) - скобки:

alert(a.getX()); // вызов функции
alert(a.getX); // вывод самого объекта функции
__________________
Тонкости ECMAScript
Ответить с цитированием
  #53 (permalink)  
Старый 24.08.2009, 20:56
Аватар для JSprog
L
Отправить личное сообщение для JSprog Посмотреть профиль Найти все сообщения от JSprog
 
Регистрация: 16.08.2009
Сообщений: 416

Как сделать то чтобы выводился не строковый вариант функции а результат?
И есть ли у экземпляра объекта свойство prototype
Счяс результат наших прерий не пойму) Дождусь твоих ответов уйду спать и завтро утром всё перечитаю
И поставь плиз + =)
__________________
Лови позитив
Ответить с цитированием
  #54 (permalink)  
Старый 24.08.2009, 20:58
Аватар для JSprog
L
Отправить личное сообщение для JSprog Посмотреть профиль Найти все сообщения от JSprog
 
Регистрация: 16.08.2009
Сообщений: 416

Кстате зайди в соседнию тему почему там генератор чисел не работает?
__________________
Лови позитив
Ответить с цитированием
  #55 (permalink)  
Старый 24.08.2009, 21:35
Профессор
Отправить личное сообщение для Dmitry A. Soshnikov Посмотреть профиль Найти все сообщения от Dmitry A. Soshnikov
 
Регистрация: 25.02.2008
Сообщений: 707

Сообщение от JSprog
Как сделать то чтобы выводился не строковый вариант функции а результат?
Ну я ж говорю - вызвать её - поставить скобки вызова:

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


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

1. Есть конструкторы и есть объекты, порождаемые от этих конструкторов:

function A(x) { // конструктор
  this.x = x;
}

var a = new A(10); // объект "а", порождаемый конструктором А
var b = new B(20); // объект "b", порождаемый конструктором А


Здесь "А" - конструктор, "а" и "b" - порождаемые от "А" объекты. Внутри конструктора this указывает на создаваемый объект, поэтому "а" и "b" имеют свойство "x".

2. Если создавать свойства и методы в конструкторе, они получаются свои для каждого объекта, что влечёт за собой больший расход памяти:

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

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

alert(a.hasOwnProperty('x')) // true
alert(b.hasOwnProperty('x')) // true
alert(a.hasOwnProperty('getX')) // true
alert(b.hasOwnProperty('getX')) // true


3. Узнал, что у порождаемых объектов есть прототип, в котором хранятся общие для всех экземпляров свойства и методы. Поэтому, методы, поскольку они одинаковые, удобней хранить в прототипе:

function A(x) {
  this.x = x;
}

A.prototype.getX = function () {};

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

alert(a.hasOwnProperty('x')) // true
alert(b.hasOwnProperty('x')) // true
alert(a.hasOwnProperty('getX')) // false!
alert(b.hasOwnProperty('getX')) // false!

// один и тот же метод
alert(a.getX == b.getX) // true
alert(a.getX === A.prototype.getX); // true
alert(b.getX === A.prototype.getX); // true


4. Узнал, что конструктор и ссылка конструктора .prototype связаны с порождаемым объектом лишь на этапе создания. Дальше, этот конструктор и ссылка .prototype могут быть обnull'ены, но порождённый объект всё равно будет иметь связь с прототипом - посредством внутренней неявной (скрытой) ссылки объекта на прототип. Эта ссылка называется [[Prototype]]. В браузере Firefox, её можно получить через .__proto__ (это я уже сам прочитал ):

function A(x) {
  this.x = x;
}

A.prototype.getX = function () {};

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

alert(A.prototype.getX === a.__proto__.getX); // true, вот она, настоящая ссылка на прототип

alert(A.prototype.getX === b.__proto__.getX); // true, и здесь

// поэтому, мы можем присвоить null
A.prototype = null;
A = null;

// но всё равно достучаться до метода .getX из прототипа
// через .__proto__
alert(a.getX()); // 10
alert(b.getX()); // 20

// Просто изначально, A.prototype и a.__proto__ и b.__proto__
// указывают на один и тот же объект:

// A.prototype ---> [Прототип] <-- a.__proto__ и <-- b.__proto__


При этом, явно __proto__ указывать не надо. Это и есть наследование, основанное на прототипах: если свойство/метод не найдены в самом объекте, его поиск продолжается в прототипе. Т.е. метод .getX не найден в самом объекте "а", но будет найден в a.__proto__.getX (или, по стандарту a.[[Prototype]].getX). Аналогично с объектом "b".

5. Конструктор сам может хранить свои свойства (как в примере в начале темы):

function A(x) {
  this.x = x; // свойство экземпляра
}
A.x = 100; // свойство конструктора

var a = new A(10);
alert(a.x);
alert(a.constructor.x); // 100


Поправь, если я где-то ошибся.
__________________
Тонкости ECMAScript
Ответить с цитированием
  #56 (permalink)  
Старый 25.08.2009, 08:27
Аватар для JSprog
L
Отправить личное сообщение для JSprog Посмотреть профиль Найти все сообщения от JSprog
 
Регистрация: 16.08.2009
Сообщений: 416

Подскажите пожалуйста=)
<html>
<head> 
 <script language="javascript" type="text/javascript">
function getRandom300(m,n){
return Math.floor(Math.random()*(n-m+1))+m;
}
function getRandom6(){
n6=getRandom300(100000,999999);
document.getElementById(b1).innerHTML=n6
return sla1;
}
getRandom6()
</script>
</head>
<body>
<b id="b1"></b>
</body>
</html>

Не как не пойму в чём дело не может код найти с id b1
Сообщение от Dmitry A. Soshnikov
в котором хранятся общие для всех экземпляров свойства
А вот свойства надо проверить
__________________
Лови позитив

Последний раз редактировалось JSprog, 25.08.2009 в 08:31.
Ответить с цитированием
  #57 (permalink)  
Старый 25.08.2009, 09:11
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от JSprog
Не как не пойму в чём дело не может код найти с id b1
Когда вызывается getRandom6 элемент с id b1 еще не существует.
Ответить с цитированием
  #58 (permalink)  
Старый 25.08.2009, 09:24
Профессор
Отправить личное сообщение для Dmitry A. Soshnikov Посмотреть профиль Найти все сообщения от Dmitry A. Soshnikov
 
Регистрация: 25.02.2008
Сообщений: 707

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

Да=)
Теперь написано что
document.getElementbyId(b1)=null

В firebug что делать?
__________________
Лови позитив

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

Ну что, закончили?
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подскажите, есть ли такая 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