Функции-конструкторы в 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; |
function MyClass() { this.canWalk = true; } MyClass.prototype.Module1 = function() { alert( 'Привет' ); }; var animal = new MyClass(); animal.Module1(); |
А почему вот так: new MyClass.Module1 код который вы показали не запускается?
И как быть для остальных видов запуска или там аналогично? |
function MyClass() { this.canWalk = true; } MyClass.prototype.Module1 = function() { alert( 'Привет' ); }; new MyClass().Module1(); все запускается |
а если так:new MyClass.Module1; то не работает
|
Цитата:
так вы можете просто посмотреть console.log(new MyClass.Module1) |
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 Цитата:
UPD2 Цитата:
function MyClass() { this.prm = "test1"; } MyClass.Module1 = function Module1() { return Object(new MyClass().prm); } alert(new MyClass.Module1) |
Работает да, потому что сделали так:
MyClass.Module1 = function Module1() {...} то есть имя метода совпадает с именем функции этого метода. Я такого не встречал раньше, так разве можно делать? |
Цитата:
|
Цитата:
Просто я думал, что new MyClass.Module1 в javascript примерно такое же как и new PHPClass\ClassNamespace\Etc(); в PHP. Это не так, выходит. |
Часовой пояс GMT +3, время: 08:45. |