Цитата:
|
Все ущли завтро договорим=)
|
Цитата:
function A(x) { this.x = x; this.getX = function () { 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 Цитата:
Цитата:
Цитата:
|
Цитата:
|
Цитата:
// так будет ошибка var a = function () {} var b = 10; // а так - правильно var a = function () {}; var b = 10; Вообще, точка с запятой нужна обязательно после некоторых инструкций, просто парсер сам вставляет точку с запятой в случае перевода строки. Если же перевода не будет (как в примере выше) - будет ошибка, поэтому точка с запятой там нужна. |
Вы в свой код пробовали добавить?
alert(a.getX) |
Цитата:
А если добавить: alert(a.getX === b.getX); // false то явно видно, что это не один и тот же метод. Что-то я запутался. Может, всё-таки, тут надо прототип как-то задействовать, чтобы оба объекта имели один и тот же метод? Ведь, если в прототипе свойство расшаривается одно на всех, то, может, и метод тоже будет? Правда, я так и не понял, почему нельзя в прототип метод положить? |
У меня с использованием
alert(a.getX) просто выводитса код функции |
<html> <body> <script language="javascript" type="text/javascript"> function A(x) { this.x = x; } A.prototype.getX=function(){return 15} var a = new A(10); var b = new A(20); // ну тут понятно alert(a.hasOwnProperty('x')); // true alert(b.hasOwnProperty('x')); // true alert(a.isPrototypeOf('x'));//false // а здесь почему, если ты говоришь, что // метод getX - один на оба объекта alert(a.hasOwnProperty('getX')); // false alert(b.hasOwnProperty('getX')); // false alert(a.isPrototypeOf('getX')); alert(a.getX) </script> </body> </html> |
Цитата:
|
И как сделать чтобы вывелся результат работы функции?
|
Цитата:
alert(a.hasOwnProperty('getX')); // false alert(b.hasOwnProperty('getX')); // false и, что самое важное: alert(a.getX === b.getX); // true. Теперь это один и тот же метод. Я думаю, ты именно об этом говорил. Цитата:
Цитата:
A.prototype.isPrototypeOf(a); // true Цитата:
alert(a.getX()); // вызов функции alert(a.getX); // вывод самого объекта функции |
Как сделать то чтобы выводился не строковый вариант функции а результат?
И есть ли у экземпляра объекта свойство prototype Счяс результат наших прерий не пойму) Дождусь твоих ответов уйду спать и завтро утром всё перечитаю И поставь плиз + =) |
Кстате зайди в соседнию тему почему там генератор чисел не работает?
|
Цитата:
alert(a.getX()); // 10 alert(b.getX()); // 20 Цитата:
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 Поправь, если я где-то ошибся. |
Подскажите пожалуйста=)
<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 Цитата:
|
Цитата:
|
Цитата:
|
Да=)
Теперь написано что document.getElementbyId(b1)=null В firebug что делать? |
Ну что, закончили?:)
|
Надо ещё свойства потестить в прототипе
|
JSprog, хотел плюсануть за твои попытки объяснить и объяснения, но, почему-то, пишет, что "Вы должны добавить отзыв кому ещё прежде, чем сможете снова добавить его JSProg" (хотя, я перед этим плюсанул B~Vladi, который, хоть и участвовал меньше, но тоже пытался объяснить), так что, не серчай, починят - плюсану ;) В любом случае, надеюсь, тема не прошла зря.
|
:cray: :cray: :cray:
Почему тогда код не работает? пишет document.getElementById(b1) is null |
Кому что не понятно?! Надеюсь с первоначальным кодом разобрались?!
|
Мне не понятно
<html> <body> <b id=b1></b> <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 } getRandom6() </script> </body> </html> document.getElementById(b1) is null пишет firebug С первым кодом разобрались |
Цитата:
Цитата:
|
document.getElementById(b1) b1 - нет такой переменной (undefined). Сюда нужно передавать 'b1'. |
эта не переменая а значение свойства id
|
Цитата:
|
Цитата:
JSprog, для разных проблем и кодов создавай отдельные темы. |
Цитата:
getElementById - принимает в качастве параметра выражение, возвращаемое текстовую строку. Выражение 'b1' - возвращает значение b1. У тебя же синтаксически передаётся имя переменной b1. |
Ты про что?:)
|
Про твой вопрос. Не заметно?!
|
Какой вопрос? иди отдохни
|
Люди что будет значить синтаксис если с обычной переменной например var x=4 указать что-нибудь рядом в квадратных скобках например x[name]
|
Всё, счем ты работаешь в JS - объекты.
Переменная x, равная 4 - это объект типа Number. У него есть те же свойства и методы, что и у встроенного объекта Number, т.к. это его экземпляр. Далее, если записать x[name] - произойдёт обращение к свойству объекта x, имя которого вернёт переменная name. Если записать x['name'] - будет обращение конкретно к свойству name. Если ты знаешь - возможны 2 вида обращения к свойствам объекта: 1. Obj.property 2. Obj['property'] |
Цитата:
var x = 4; x.a = 5; alert(x.a); // undefined |
Цитата:
Хотя свойства и методы есть из-за обёртки |
Что-то я не понял что будет если не записать кавычек x[name] можно по подробнее
Всё ясно например name=uuu x[name] обратитса к свойству uuu? |
Ой, да, простая запись
var x=4 не создаёт объект, но наследует методы объекта Nubmer. Цитата:
var name='uuu'; |
Часовой пояс GMT +3, время: 12:51. |