[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: конструктор
123456
function test()
{

var self = this;

this.a = function () {
alert('a');
}

// что-то похожее на конструктор
this.test = function () {
alert('start');
}

}


Такое вообще возможно?

или правильно делать так:
function test()
{
alert('start');

var self = this;

this.a = function () {
alert('a');
}

}
sergeiss
123456, вот так сделай и не парься:

function test()
{
// это и есть конструктор!!! Сюда можно и параметры передать, если надо
alert('start');
if( arguments.length == 1 && typeof(arguments[0].pr) != 'undefined' ) {
this.pr = arguments[0].pr;
}
}


// а в прототипе укажи все методы и свойства
test.prototype = {
pr: 'свойство',
a: function() {
alert( 'a : ' + this.pr );
}
}


var t = new test();
var t2 = new test( {pr:'СВОЙСТВО'} );

t.a();
t.b();

На самом деле, тут есть некоторые подводные камни, связанные с использованием массивов в качестве свойств... Но в целом такая схема рабочая на 100%.

PS. Чуть расширил класс, добавил свойство и сделал возможность его инициализации :)

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
chee
первый вариант

_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
volter9
123456
Тебе лучше использовать прототипы вместо функций:
function test () {
alert('start');
}

test.prototype.a = function () {
alert('a');
};

var t = new test;

t.a();

Вся инициализация идет в конструктор (функцию test), а остальные методы в прототип. Так будет работать оптимальнее и более логичнее, потому что при создание нового объекта через конструктор test, конструктор будет добавлять каждый раз новую функцию для каждого созданного метода внутри конструктора.
Можешь почитать об этом на JavaScript.ru: https://learn.javascript.ru/js
Разделы ООП в прототипном стиле и функциональном.

_____________
Мой блог
123456
sergeiss, что лучше использовать, прототип или же функцией (как в моем варианте)

chee
первый вариант не запустит метод как конструктор
123456
volter9
сейчас гляну
sergeiss
Цитата (123456 @ 14.07.2015 - 22:09)
что лучше использовать, прототип или же функцией (как в моем варианте)

Вот уже был правильный ответ:
Цитата (volter9 @ 14.07.2015 - 22:08)
Тебе лучше использовать прототипы вместо функций:


И я дополнил немного свой первый ответ (код в нем), посмотри внимательно.

PS. Что касается именно ООП в JS, то вот очень хорошая статья: http://javascript.ru/tutorial/object/inheritance В ней описано, в т.ч., и проблема использования массивов в качестве свойств (вместе с ее решением). Я именно по этой статье "врубился" полностью в эту тему smile.gif Хотя не исключаю, что где-то оно описано и лучше.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
chee
Цитата (123456 @ 14.07.2015 - 22:09)
первый вариант не запустит метод как конструктор

я отвечал с учетом того, что alert не должен выскакивать при создании объекта. Каков вопрос, таков и ответ. laugh.gif

_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.