Цитата:
|
Все ущли завтро договорим=)
|
Цитата:
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, время: 04:41. |