Не понятное поведение создаваемого объекта
Доброго времени суток.
Возможно не правильно выбран подход... В общем, код: 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, время: 03:59. |