Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Есть ли разница? (https://javascript.ru/forum/misc/4840-est-li-raznica.html)

B~Vladi 24.08.2009 18:06

Цитата:

Сообщение от JSprog
тепреь ты точно спалися

Достал ты меня, немо... Иди проспись...

JSprog 24.08.2009 18:07

Типо умный такой? Реально думаешь что я немо?
Иди сам проспись
А твои глупые отмазки сразу видно

Dmitry A. Soshnikov 24.08.2009 18:10

Цитата:

Сообщение от JSprog
На самом деле можно объяснить одним предложением

JSprog, хорошо, ты тогда расскажи.

JSprog, B~Vladi, забейте отношения выяснять, нам же главное разобраться, есть ли разница, и, если есть, то в чём, не так ли?

JSprog 24.08.2009 18:12

Первый вариант создаёт копию свойства для каждого экземпляра объекта то есть свойство экземпляра , а второй одну копию для всех экземпляров объекта то есть свойство класса

Dmitry A. Soshnikov 24.08.2009 18:18

Цитата:

Сообщение от JSprog
function func(arguments) {this.z=arguments}

Цитата:

Сообщение от JSprog
Первый вариант создаёт копию свойства для каждого экземпляра объекта то есть свойство экземпляра

Вроде понятно, т.е. func - это конструктор, который создаёт новый объект и this внутри этого конструктора указывает на новый объект, да? И "this.z" - создаёт свойство "z" в этом созданном объекте и присваивает ему переданное значение "arguments", так?

Цитата:

Сообщение от JSprog
function func(arguments){} func.z=100

Цитата:

Сообщение от JSprog
а второй одну копию для всех экземпляров объекта то есть свойство класса

В смысле, все порождённые экземлпяры будут иметь доступ к func.z? А как обратиться из экзепляра к ней, если они связаны?

B~Vladi 24.08.2009 18:19

Цитата:

Сообщение от Dmitry A. Soshnikov
забейте отношения выяснять

Я как раз и решил это сделать:)
Цитата:

Сообщение от Dmitry A. Soshnikov
есть ли разница, и, если есть, то в чём, не так ли?

Именно.

Ок, что бы не тыкать друг на друга - расскажу я.

function func(arguments) {this.z=arguments}

Здесь this указывает на объект, откуда был вызван конструктор(функция), в данном слечае - это window:
func(100);

Поэтому свойство z мы устанавливаем для window.
function func(arguments){}
func.z=100


Здесь есть объект typeof=='function', и этому (только) объекту мы устанавливаем свойство z.

Если бы мы записали
fnc.prototype.z

Свойство z имели бы все объекты типа function.

Так пойдёт?!

JSprog 24.08.2009 18:21

Цитата:

Сообщение от Dmitry A. Soshnikov
В смысле, все порождённые экземлпяры будут иметь доступ к func.z? А как обратиться из экзепляра к ней, если они связаны?

это свойство, связанное с самим классом, а не с каждым экземпляром этого класса
А вернее func.prototype.z
func.z скорее всего вообще недоступно дочерним объектам
<script>
function yyy(){}
yyy.z=100
xxx=new yyy
alert(xxx.z)
</script>

Тому потверждение

Dmitry A. Soshnikov 24.08.2009 18:27

Цитата:

Сообщение от JSprog
это свойство, связанное с самим классом, а не с каждым экземпляром этого класса

Ага, точно. Т.е. обратиться можно только через сам конструктор, либо через ссылку .constructor у объекта (если её не перезаписали).

function func(arguments){}
func.z = 10;
var a = new func(10);
alert(a.constructor.z); // 10
alert(func.z); // 10


Цитата:

Сообщение от JSprog
А вернее func.prototype.z

А в данном случае "z" как связана с порождёнными объектами? Или здесь тоже с конструктором связь?

Цитата:

Сообщение от B~Vladi
Здесь this указывает на объект, откуда был вызван конструктор(функция), в данном слечае - это window:

Да, действительно. В примере же "func(100);" не указано new. А если бы было с new?

B~Vladi 24.08.2009 18:28

В JavaScript нет классов. JSprog, харош уже, давай что-нибудь уже делай...

JSprog 24.08.2009 18:29

Связь с конструктором так как дочерние объекты не копируют свойство а тольок "читают" его


Часовой пояс GMT +3, время: 11:45.