HTML5 — Вопрос - ответ • Flashgamedev.ru | Разработка и Монетизация Флэш игр
Развитие игровой вспышки
Текущее время: Вт авг 21, 2018 2:02 pm

Часовой пояс: UTC + 3 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 1426 ]  На страницу Пред.  1 ... 139, 140, 141, 142, 143
Автор Сообщение
 Заголовок сообщения: Re: HTML5 — Вопрос - ответ
СообщениеДобавлено: Пт дек 01, 2017 7:50 am 
Не в сети
Аватар пользователя

Зарегистрирован: Пт дек 11, 2009 9:33 pm
Сообщений: 337
Сайт: http://www.gameslocation.com/
Swer писал(а):
MajorMilizii писал(а):
вообще зачем здесь ob?

ob нужен для создания замыкания в функциях.
К примеру
Код:
var game = {};
game.initObjects = function(){
   game.a = {
      name:"Name A",
      getName:function(){ console.log( game.a.name); }
   }
   game.b = {
      name:"Name B",
      getName:function(){ console.log( game.b.name); }
   }
};
game.initObjects();
game.a.getName(); // output Name A
var n = game.a;
game.a = game.b;
n.getName();         // output Name B

Это не то что нужно , потому что в последней строке должно быть - output Name A .
Можно сделать так
Код:
var game = {};
game.initObjects = function(){
   game.a = game.CA("Name A");
   game.b = game.CA("Name B");
   game.c = game.CA("Name C");
};
game.CA = function( namee ){
   var ob = {
      name:namee,
      getName:function(){ console.log( ob.name); }
   }
   return ob;
};

game.initObjects();
game.a.getName(); // output Name A
var n = game.a;
game.a = game.b;
n.getName(); // output Name A

здесь всё как надо, но у меня в game.initObjects создаётся много разных объектов , а делать для каждого отдельную функцию я бы не хотел. Нужно это для того, чтобы я мог, к примеру, сделать так -
Код:
[game.b.getName][0](); // output Name B



твой пример проще всего

var game = {};
game.initObjects = function()
{
game.a = new game.CA("Name A");
game.b = new game.CA("Name B");
game.c = new game.CA("Name C");
};
game.CA = function( namee )
{
var name=namee;
this.getName=function(){console.log(name);}
};
game.initObjects();
game.a.getName();
game.b.getName();
game.c.getName();


Вернуться наверх
 Профиль Отправить e-mail  
 
 Заголовок сообщения: Re: HTML5 — Вопрос - ответ
СообщениеДобавлено: Пт дек 01, 2017 10:00 am 
Не в сети

Зарегистрирован: Пт май 03, 2013 11:38 am
Сообщений: 182
MajorMilizii писал(а):
твой пример проще всего

Незнаю может я неправильно объяснил :D
К примеру можно сделать так
Код:
var game = {};
game.initObjects = function(){
   game.a = game.createA();
   game.b = game.createB();
};
game.createA = function(){
   var b = {};
   b.name = "createA";
   b.getName = function(){console.log(b.name );}
   return b;
};
game.createB= function(){
   var b = {};
   b.name = "createB";
   b.getName = function(){console.log(b.name );}
   return b;
};
game.initObjects();
var n = game.a;
[n.getName][0](); // output createA
game.a = game.b;
[n.getName][0](); // output createA

Всё работает как надо - объект записывается в свои же функции,
Но нужно создавать дополнительные функции - createA, createB.
Я бы хотел сделать так
Код:
var game = {};
game.initObjects = function(){
   var b;
   b = game.a ={
        name:"createA",
        getName:function(){console.log(b.name );}
   };
   b = game.b ={
        name:"createB",
        getName:function(){console.log(b.name );}
   };
};
game.initObjects();
[game.a.getName][0](); // output createB - неправильно

так не получается,
и так не получится -
Код:
var game = {};
game.initObjects = function(){
   game.a ={
        name:"createA",
        getName:function(){console.log(game.a.name );}
   };
   game.b ={
        name:"createB",
        getName:function(){console.log(game.b.name );}
   };
};
game.initObjects();
var n = game.a;
[n.getName][0](); // output createA
game.a = game.b;
[n.getName][0](); // output createB - неправильно

Вот вопрос в том можно ли всё зпихнуть в одну функцию, не создавая дополнительных функций для создания объектов ?


Вернуться наверх
 Профиль Отправить e-mail  
 
 Заголовок сообщения: Re: HTML5 — Вопрос - ответ
СообщениеДобавлено: Пт дек 01, 2017 10:44 am 
Не в сети
Аватар пользователя

Зарегистрирован: Пт дек 11, 2009 9:33 pm
Сообщений: 337
Сайт: http://www.gameslocation.com/
Swer писал(а):
MajorMilizii писал(а):
твой пример проще всего

Незнаю может я неправильно объяснил :D
К примеру можно сделать так
Код:
var game = {};
game.initObjects = function(){
   game.a = game.createA();
   game.b = game.createB();
};
game.createA = function(){
   var b = {};
   b.name = "createA";
   b.getName = function(){console.log(b.name );}
   return b;
};
game.createB= function(){
   var b = {};
   b.name = "createB";
   b.getName = function(){console.log(b.name );}
   return b;
};
game.initObjects();
var n = game.a;
[n.getName][0](); // output createA
game.a = game.b;
[n.getName][0](); // output createA

Всё работает как надо - объект записывается в свои же функции,
Но нужно создавать дополнительные функции - createA, createB.
Я бы хотел сделать так
Код:
var game = {};
game.initObjects = function(){
   var b;
   b = game.a ={
        name:"createA",
        getName:function(){console.log(b.name );}
   };
   b = game.b ={
        name:"createB",
        getName:function(){console.log(b.name );}
   };
};
game.initObjects();
[game.a.getName][0](); // output createB - неправильно

так не получается,
и так не получится -
Код:
var game = {};
game.initObjects = function(){
   game.a ={
        name:"createA",
        getName:function(){console.log(game.a.name );}
   };
   game.b ={
        name:"createB",
        getName:function(){console.log(game.b.name );}
   };
};
game.initObjects();
var n = game.a;
[n.getName][0](); // output createA
game.a = game.b;
[n.getName][0](); // output createB - неправильно

Вот вопрос в том можно ли всё зпихнуть в одну функцию, не создавая дополнительных функций для создания объектов ?



у тебя все работает правильно, просто ты думаешь неправильно
Код:
var n = game.a;
[n.getName][0](); // output createA
n = game.b;
[n.getName][0](); // output createB


но на мой взгляд лучше, как я уже писал

Код:
var game = {};
game.initObjects = function()
{
game.a = new game.CA("Name A");
game.b = new game.CA("Name B");
game.c = new game.CA("Name C");
};
game.CA = function( namee )
{
var name=namee;
this.getName=function(){console.log(name);}
};
game.initObjects();
game.a.getName();
game.b.getName();
game.c.getName();


Вернуться наверх
 Профиль Отправить e-mail  
 
 Заголовок сообщения: Re: HTML5 — Вопрос - ответ
СообщениеДобавлено: Сб мар 17, 2018 6:30 pm 
Не в сети

Зарегистрирован: Пт май 03, 2013 11:38 am
Сообщений: 182
Подскажите в чём разница ?
Код:
var a = -875.23423452;
console.log( Math.trunc( a ) ); //  -875
console.log( a|0 ); // -875

Зачем нужна функция Math.trunc ?


Вернуться наверх
 Профиль Отправить e-mail  
 
 Заголовок сообщения: Re: HTML5 — Вопрос - ответ
СообщениеДобавлено: Вс мар 18, 2018 4:12 am 
Не в сети
Аватар пользователя

Зарегистрирован: Пн янв 09, 2017 8:44 pm
Сообщений: 175
Swer писал(а):
Подскажите в чём разница ?
Код:
var a = -875.23423452;
console.log( Math.trunc( a ) ); //  -875
console.log( a|0 ); // -875

Зачем нужна функция Math.trunc ?


// 1
Math.trunc()
https://developer.mozilla.org/ru/docs/W ... Math/trunc

метод Math.trunc() работает очень просто и прямолинейно: отбрасывает десятичную запятую и все цифры после неё, не обращая внимания на знак аргумента.

// 2
console.log( a|0 ); // -875
знак | это оператор побитовой операции ИЛИ

во-первых, десятичная часть, отбрасывается, если есть, а у нас есть

-875.23423452 -> -875

получаем это
( -875|0 )

дальше числа из десятичного вида представляются в 32-битном виде, но
для простоты я возьму число из 8-битного диапазона, а то придется записывать 32 числа
буру любое число от от 0 до 255, например 42
по аналогии (42 | 0)
переведем 42 и ноль из десятичного в двоичный
произведем операцию ИЛИ

0 | 0 -> 0
0 | 1 -> 1
1 | 0 -> 1
1 | 1 -> 1

42 -> 00101010
0 -> 00000000
--------------
00101010

мы получили 00101010, это результат побитовой операции ИЛИ
а 00101010 это 42
значит результат в десятичном виде это 42

какая будет разница?
1) не многие поймут второй вариант, такое я редко встречаю, это не есть ясный код
2) первый вариант имеет проблему с отсутствием совместимости со многими старыми версиями браузеров, значит у кого-то может крашнуться код

что делать?
использовать полифилл (типо fallback, но не fallback)

например:
Код:
if (!Math.trunc) {
   Math.trunc = function(v) {
      v = +v;
      return (v - v % 1)   ||   (!isFinite(v) || v === 0 ? v : v < 0 ? -0 : 0);
   };
}


но это муторно копировать вставлять, еще нужно быть уверенным, что ты не забыл полифилл для какой-нибудь функции

поэтому проще добавить es-shim.js библиотеку к проекту
https://github.com/es-shims/es5-shim
https://github.com/paulmillr/es6-shim

минус один, лишних поллифилов нагребешь

по-этому если шаришь, то нужно смотреть в сторону Babel.js


Вернуться наверх
 Профиль Отправить e-mail  
 
 Заголовок сообщения: Re: HTML5 — Вопрос - ответ
СообщениеДобавлено: Вс мар 18, 2018 4:29 pm 
Не в сети
Аватар пользователя

Зарегистрирован: Пн янв 09, 2017 8:44 pm
Сообщений: 175
забыл добавить, что для этих результатов, ты можешь использовать метод toFixed, он работает везде

https://developer.mozilla.org/ru/docs/W ... er/toFixed

Код:
var a = -875.23423452;
console.log( a.toFixed() ) // "-875"


Вернуться наверх
 Профиль Отправить e-mail  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 1426 ]  На страницу Пред.  1 ... 139, 140, 141, 142, 143

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB