Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Конструктор как свойство объекта (https://javascript.ru/forum/misc/37691-konstruktor-kak-svojjstvo-obekta.html)

kenrike 01.05.2013 20:48

Конструктор как свойство объекта
 
Здравствуйте!
есть код:
function TestObject(){
       this.PROPERTY = new this.TestConstructor();
   }
   TestObject.prototype.TestConstructor = function(){
       this.sproperty='alala';
   };
    var testObject = new TestObject();
    console.log(testObject.PROPERTY.sproperty);

выводит alala, как и должно, однако мне не нравится this в new this.TestConstructor(); и вообще кажется я что-то упускаю и инициализирую объект с prototype свойствами неправильно. Посоветуйте пожалуйста как улучшить такой код?

danik.js 01.05.2013 21:50

А зачем конструктор пихать в прототип?

function TestConstructor(){
   this.sproperty='alala';
}
function TestObject(){
   this.PROPERTY = new TestConstructor();
}

var testObject = new TestObject();
console.log(testObject.PROPERTY.sproperty);

kenrike 01.05.2013 22:10

Хотелось что бы другой человек в своем коде просто мог переопределить TestConstructor не замарачиваясь, что будет использовать TestObject.
Но в общем все понял. Спасибо)

megaupload 01.05.2013 23:49

чувак, форматируй код красиво

function TestConstructor () {
	this.sproperty = 'ololo';
}


function TestObject () {
	this.PROPERTY = new this.TestConstructor();
}

TestObject.prototype.TestConstructor = TestConstructor;



var testObject = new TestObject();
alert(testObject.PROPERTY.sproperty);

kenrike 01.05.2013 23:50

извините, я от руки набирал прямо в теге и не думал об этом)

megaupload 01.05.2013 23:55

kenrike, а вот по поводу твоей проблемы с "не хочу засирать область видимости"

var TestObject = (function () {

	function TestConstructor () {
		this.sproperty = 'ololo';
	}


	function TestObject () {
		this.PROPERTY = new TestConstructor();
	}

	// экспортируешь то, что нужно
	return TestObject;

})();



var testObject = new TestObject();
alert(testObject.PROPERTY.sproperty);

alert(TestConstructor) // тадааа


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