Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Конструкторы в Javascript, OOP (https://javascript.ru/forum/misc/15854-konstruktory-v-javascript-oop.html)

InviS 16.03.2011 12:29

Конструкторы в Javascript, OOP
 
Подскажите, пожалуйста, можно ли объявить объект с конструктором, не через функцию.
если я объявляю объект через литерал:
var myObj = {
  windowScrollPosition: 0,
  showHeader : false,
  recalculate : function(){
     // function recalculating coords
  }
}

И я хочу передать функции объект, относительно которого хочу считать координаты.. что-то типа:
var coordObj = new myObj(objForCalc);


Я могу как-то объявить конструктор? или нужно делать только через функцию, а не литерал?!

Kolyaj 16.03.2011 12:31

Вы написали что-то странное.

Matre 16.03.2011 13:18

function myObj(...) {
...
}
myObj.свойство = значение; // и т. д.


Вы это имели ввиду?

InviS 16.03.2011 13:18

В смысле странное? Я хочу узнать, может ли быть конструктор у объекта, описанного литералом? или я должен там создать функцию init() и ее запускать, чтоб передавать параметры?
В php есть метод __construct(), который вызывается при создании объекта, есть ли в js такое?
Matre,
а разве так можно делать? Ну в принципе примерно это, только чтоб это делалось при создании объекта...

Kolyaj 16.03.2011 13:26

Цитата:

Сообщение от InviS
В php есть метод __construct(), который вызывается при создании объекта, есть ли в js такое?

Так у вас объект уже создан, что должен делать мифический конструктор?

Matre 16.03.2011 13:31

Цитата:

Ну в принципе примерно это, только чтоб это делалось при создании объекта...
Это, увы, никак.
Можно написать функцию, которая будет перегонять свойства из созданного объекта (не порождённого myObj(), а другого объекта) в свойства myObj. Примерно так:

function extend(from, to) {...}
extend({
ключ : значение
}, myObj);

monolithed 16.03.2011 21:34

Цитата:

Сообщение от InviS
Я могу как-то объявить конструктор? или нужно делать только через функцию, а не литерал?!

не уверен, но возможно вы имеи в виду что-то типа:

<p id="element">text</p>

<script type="text/javascript">
function Foo(i) {
    this.i = i;
};

Foo.prototype = {
    get : function() {
        return document.getElementById(this.i);
    },
    set : function() {
        this.get().style.color = 'red';
     }
}

var bar = new Foo('element');
bar.set();
</script>


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