Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 14.01.2019, 19:02
Кандидат Javascript-наук
Отправить личное сообщение для Начинающий-Js-кодер Посмотреть профиль Найти все сообщения от Начинающий-Js-кодер
 
Регистрация: 12.06.2016
Сообщений: 120

Функции-конструкторы в JS
Сейчас изучаю конструкторы, прототипы и у одной небезызвестной библиотеки встретил такого плана код:
new go.Binding("points").makeTwoWay()

если как сделать
new MyClass();
я понимаю,код вот:
function MyClassl(name) {
  this.name = name;
  this.canWalk = true;
}

var animal = new MyClass();
, то как сделать
new MyClass.Module1();
не понимаю, пробовал вот так:
function MyClass() {
  // вспомогательная переменная
  var phrase = "Привет";

  this.Module1 = function() {
    alert( phrase ); // использование
  };
}

new MyClass.Module1();

так не работает, пробовал так:
function MyClass() {

  this.prm = "test1";
function Module1() {
      return "Module1";
    }
  return { Module1: Module1 };  
}
при вызове
alert( new MyClass.Module1() );
ничего не срабатывает.

И видел, что некоторые делают еще так:
new go.Binding("points").makeTwoWay(),

На сайте в разделе по конструкторам не нашел такое, и хотело бы узнать, зачем делаются три такие конструкции и как они так делаются, что можно вызвать new MyClass.Module1.Submodule1;
Ответить с цитированием
  #2 (permalink)  
Старый 14.01.2019, 19:18
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,552

function MyClass() {
  this.canWalk = true;
}
MyClass.prototype.Module1 = function() {
	alert( 'Привет' );
};

var animal = new MyClass();
animal.Module1();
Ответить с цитированием
  #3 (permalink)  
Старый 14.01.2019, 19:39
Кандидат Javascript-наук
Отправить личное сообщение для Начинающий-Js-кодер Посмотреть профиль Найти все сообщения от Начинающий-Js-кодер
 
Регистрация: 12.06.2016
Сообщений: 120

А почему вот так: new MyClass.Module1 код который вы показали не запускается?
И как быть для остальных видов запуска или там аналогично?
Ответить с цитированием
  #4 (permalink)  
Старый 14.01.2019, 19:41
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,552

function MyClass() {
  this.canWalk = true;
}
MyClass.prototype.Module1 = function() {
	alert( 'Привет' );
};

new MyClass().Module1();


все запускается
Ответить с цитированием
  #5 (permalink)  
Старый 14.01.2019, 19:45
Кандидат Javascript-наук
Отправить личное сообщение для Начинающий-Js-кодер Посмотреть профиль Найти все сообщения от Начинающий-Js-кодер
 
Регистрация: 12.06.2016
Сообщений: 120

а если так:new MyClass.Module1; то не работает
Ответить с цитированием
  #6 (permalink)  
Старый 14.01.2019, 19:48
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,552

Сообщение от Начинающий-Js-кодер
а если так:new MyClass.Module1; то не работает
методы вызываются скобками
так вы можете просто посмотреть console.log(new MyClass.Module1)
Ответить с цитированием
  #7 (permalink)  
Старый 14.01.2019, 19:49
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 725

function MyClass() {}

MyClass.Module1 = function Module1() {
	var phrase = "Привет";
	alert(phrase);
}

new MyClass.Module1();


function MyClass() {
	this.prm = "test1";
}

MyClass.Module1 = function Module1() {
	return Object(new MyClass().prm);
}

alert(new MyClass.Module1())


UPD
Сообщение от j0hnik
все запускается
То, что вы метод назвали как в C#, никак его автомагический не сделает классом. Вы вызываете метод, а не класс.

UPD2
Сообщение от Начинающий-Js-кодер
а если так:new MyClass.Module1; то не работает
Вообще-то работает,
function MyClass() {
	this.prm = "test1";
}

MyClass.Module1 = function Module1() {
	return Object(new MyClass().prm);
}

alert(new MyClass.Module1)
Ответить с цитированием
  #8 (permalink)  
Старый 14.01.2019, 20:14
Кандидат Javascript-наук
Отправить личное сообщение для Начинающий-Js-кодер Посмотреть профиль Найти все сообщения от Начинающий-Js-кодер
 
Регистрация: 12.06.2016
Сообщений: 120

Работает да, потому что сделали так:
MyClass.Module1 = function Module1() {...}
то есть имя метода совпадает с именем функции этого метода. Я такого не встречал раньше, так разве можно делать?
Ответить с цитированием
  #9 (permalink)  
Старый 14.01.2019, 20:16
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,552

Сообщение от Malleys
То, что вы метод назвали как в C#, никак его автомагический не сделает классом. Вы вызываете метод, а не класс.
Я и не говорил что это класс
Ответить с цитированием
  #10 (permalink)  
Старый 14.01.2019, 20:40
Кандидат Javascript-наук
Отправить личное сообщение для Начинающий-Js-кодер Посмотреть профиль Найти все сообщения от Начинающий-Js-кодер
 
Регистрация: 12.06.2016
Сообщений: 120

Цитата:
То, что вы метод назвали как в C#, никак его автомагический не сделает классом. Вы вызываете метод, а не класс.
То есть в javascript нет возможности при исполнении такой строки new MyClass.Module1 вызвать именно конструктор new MyClass.Module1 а не MyClass и его метод Module1?
Просто я думал, что new MyClass.Module1 в javascript примерно такое же как и new PHPClass\ClassNamespace\Etc(); в PHP. Это не так, выходит.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Объяснение работы функции в js. Neor Общие вопросы Javascript 2 02.05.2018 23:14
Как заставить JS обрабатывать функции для всех блоков с заданным классом? GTX14 Общие вопросы Javascript 1 04.04.2015 16:12
JS на ARM. Нет функции SergNF Общие вопросы Javascript 0 26.02.2013 08:47
Переменная php -> параметр функции JS allie Общие вопросы Javascript 3 30.09.2011 09:11
Запуск при редиректе некой js функции Dorsaj Элементы интерфейса 0 22.10.2010 15:05