Показать сообщение отдельно
  #22 (permalink)  
Старый 02.11.2010, 17:12
Аватар для eai
eai eai вне форума
Аспирант
Отправить личное сообщение для eai Посмотреть профиль Найти все сообщения от eai
 
Регистрация: 09.07.2009
Сообщений: 36

Создаем объекты без наследования (от Object не считается)
var Point = Object.inherit({
     x: 0, // что то вроде значения по умолчанию
     y: 0, // что то вроде значения по умолчанию
    constructor: function(ax,ay) {
        this.x = ax;
        this.y = ay;
    },
    toString: function(){
		return "(x=" + this.x + " y=" + this.y + ")";
    }
});

Работает!
Вообще если уж сравнивать с C++ то присвоение свойств объекта в момент объявления это не есть правильно. Однако это полезная фича (на мой взгляд), тем более что у нас ситуация когда присваивание и есть объявление. Так мы имеем возможность присваивать значение свойств по умолчанию.


Усложняем
var Point = Object.inherit({
        a: new Array(2),
    constructor: function(ax,ay) {
        this.a[0] = ax;
        this.a[1] = ay;
    }
});

Не работает. Вернее работает, но свойство а ведет себя как статическое свойство. Иными словами оно общее для всех экземпляров "класса" Point.
Посему заповедь. Хочешь свойство сложного типа, создавай его в конструкторе.
var Point = Object.inherit({
        a: null, //вообще без этой строчки можно обойтись, но выглядит красивым объявлением
    constructor: function(ax,ay) {
        this.a = new Array(2);
        this.a[0] = ax;
        this.a[1] = ay;
    }
});


Кстати, а можно ли с помощью этой библиотеки создавать статические свойства простых типов?

Последний раз редактировалось eai, 02.11.2010 в 17:30.
Ответить с цитированием