Не понятное поведение создаваемого объекта
Доброго времени суток.
Возможно не правильно выбран подход... В общем, код:
var Offline = function(){
this._inst = false;
this.version = false;
this.url = false;
this.test = "31234wfs";
this.Instance = function(){
if( this._inst ) return this._inst;
return this._inst = new this;
};
this.getUrl = function(url){
switch( this.version ){
case "02":
this.url = url;
break;
default: this.url = url;
}
return this.url;
};
this.getLink = function( url, ankor ){
var dom,
//href = this.getUrl(url)
href = url
;
if( href ){
dom = "<a href='"+ href +"'>"+ ankor +"</a>";
}
else{
dom = "<span>"+ ankor +"</span>";
}
return dom;
};
};
Ожидания не оправдались... Вот что в удалось вытянуть: console.log( Offline );
function (){
this._inst = false;
this.version = false;
this.url = false;
this.test = "31234wfs";
this.Instance = function(){
if( this._inst ) return this._inst;
return this._inst = new this;
};
this.getUrl = function(url){
switch( this.version ){
case "02":
this.url = url;
break;
default: this.url = url;
}
return this.url;
};
this.getLink = function( url, ankor ){
var dom,
//href = this.getUrl(url)
href = url
;
if( href ){
dom = "<a href='"+ href +"'>"+ ankor +"</a>";
}
else{
dom = "<span>"+ ankor +"</span>";
}
return dom;
};
}
console.log( Offline.test ); undefined console.log( Offline.Instance.test ); Uncaught TypeError: Cannot read property 'test' of undefined Где допустил ошибку? ..вроде все логично.. |
Цитата:
|
Я должен работать с Offline как с объектом.
Код написан по аналогии работающего примера, возможно я не все захватил с того примера, но не знаю что, вот и просил |
Цитата:
|
Задай конкретный вопрос что ты не можешь понять.
|
Offline.test должно вернуть 31234wfs, а не undefined
Почему же оно возвращает undefined? |
Цитата:
function Apple() {
this.color = 'green';
}
Apple.color // undefined
var apple = new Apple();
apple.color // green
Ты не понимаешь почему так происходит - бегом учить основы. Что такое функция, что такое конструктор и т.д. |
Я просто запутался...
Вот это:
var Instance = function() {
if (this._instance) return this._instance;
return this._instance = new this;
};
var Apple = function(){
this.color = "green";
};
Apple.Instance = Instance;
Apple.Instance.color
Должно же отдать green, а не undefined ??! |
Иди читай что такое функция.
|
И как ее вызвать. Где у тебя вызов функции Instance?
|
У тебя Instance - функция, так? То есть подпрограмма.
Где в коде у тебя переход к исполнению подпрограммы? |
var Instance = function() {
if (this._instance) return this._instance;
return this._instance = new this;
};
Это функция, такая штуковина, котрая выполняет участок кода.
var Apple = function(){
this.color = "green";
};
Это тоже функция, которая выполняет код, а не содержит цвет.
Apple = {
this.color: 'green'
}
Вот так и будет работать, только function убрать |
Цитата:
|
Цитата:
Apple.Instance().color Цитата:
|
Про вторую то страницу и не заметил...
Цитата:
Цитата:
Ваш вариант тоже имеет место быть, но мне было интересно почему мой не работал, мне он как то ближе |
Цитата:
Цитата:
|
Добиваюсь подобия ООП.
В итоге:
var Offline = function(){
this.version = false;
this.url = false;
this.getUrl = function(url){
switch( this.version ){
case "02":
this.url = url;
break;
//default: this.url = url;
}
return this.url;
};
this.getLink = function( url, ankor ){
var dom,href = this.getUrl(url);
if( href ){
dom = "<a href='"+ href +"'>"+ ankor +"</a>";
}
else{
dom = "<span>"+ ankor +"</span>";
}
return dom;
};
};
Offline.Instance = Instance;
Offline.Instance().version = GetParameter("version");
Instance и GetParameter реализованы в базовом файле. В процессе:
var offline = '<?=$offline?>';
...
if( offline ){
var url = offline+"&number="+num+"&detail="+detail;
detAnalog += "<div id='"+ num +"'>"+ Offline.Instance().getLink( url, num ) +"</div>";
}else ...
|
То есть получается что тебе и не нужно чтобы Offline был функцией, так?
var Offline = {
version: GetParameter("version"),
getUrl: function(url){
switch( this.version ){
case "02":
this.url = url;
break;
default: this.url = url;
}
return this.url;
},
getLink: function( url, ankor ){
var dom,href = this.getUrl(url);
if( href ){
dom = "<a href='"+ href +"'>"+ ankor +"</a>";
}
else{
dom = "<span>"+ ankor +"</span>";
}
return dom;
}
};
Offline.getLink();
Возможно название объекта лучше написать с маленькой буквы. Хотя допустим встроенный объект Math пишут же с большой. Непонятно только че делает getUrl. Полагаю что какую-то ненужную хуйню и его нужно выпилить. Не ankor а anchor. Имена функций надо с маленькой буквы писать. |
Цитата:
Цитата:
Цитата:
Цитата:
Offline.Instance = Instance; danik.js, Вы мне достаточно помогли, вопрос можно закрыть. Всем спасибо за уделенное внимание. |
Хотя если кто объяснит существенную разницу между
var Offline = function(){
this.version = false;
this.url = false;
this.getUrl = function(url){
switch( this.version ){
case "02":
this.url = url;
break;
//default: this.url = url;
}
return this.url;
};
this.getLink = function( url, anchor ){
var dom,href = this.getUrl(url);
if( href ){
dom = "<a href='"+ href +"'>"+ anchor +"</a>";
}
else{
dom = "<span>"+ anchor +"</span>";
}
return dom;
};
};
И
var Offline = {
version : false,
url : false,
getUrl : function(url){
switch( this.version ){
case "02":
this.url = url;
break;
//default: this.url = url;
}
return this.url;
},
getLink : function( url, anchor ){
var dom,href = this.getUrl(url);
if( href ){
dom = "<a href='"+ href +"'>"+ anchor +"</a>";
}
else{
dom = "<span>"+ anchor +"</span>";
}
return dom;
}
};
Буду признателен... Для меня они идентичны. |
Первое - функция-конструктор, с помощью которой можно создавать объекты через new, а второе - объект.
|
Вариант с объектом можно записать как:
var Offline = {};
Offline.version = false;
То есть создали объект, затем определили ему свойства. Вместо создания объекта с уже заданным набором свойств. Так как функция - тоже объект, то ты можешь запросто заменить это на:
var Offline = function() {};
Offline.version = false;
Но какой мысл в этой функции? |
danik.js,
Вы правы, в данной ситуации это излишне. |
| Часовой пояс GMT +3, время: 04:34. |