Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Не понятное поведение создаваемого объекта (https://javascript.ru/forum/misc/52182-ne-ponyatnoe-povedenie-sozdavaemogo-obekta.html)

borodatych 07.12.2014 10:02

Не понятное поведение создаваемого объекта
 
Доброго времени суток.

Возможно не правильно выбран подход...

В общем, код:
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


Где допустил ошибку? ..вроде все логично..

danik.js 07.12.2014 10:06

Цитата:

Сообщение от borodatych
Где допустил ошибку? ..вроде все логично..

Объясни логику, которую ты тут видишь. Поподробней.

borodatych 07.12.2014 10:43

Я должен работать с Offline как с объектом.

Код написан по аналогии работающего примера, возможно я не все захватил с того примера, но не знаю что, вот и просил

danik.js 07.12.2014 11:24

Цитата:

Сообщение от borodatych
Я должен работать с Offline как с объектом.

Ну так работай. В javascript функция является объектом.

danik.js 07.12.2014 11:25

Задай конкретный вопрос что ты не можешь понять.

borodatych 07.12.2014 11:50

Offline.test должно вернуть 31234wfs, а не undefined
Почему же оно возвращает undefined?

danik.js 07.12.2014 12:17

Цитата:

Сообщение от borodatych
Offline.test должно вернуть 31234wfs, а не undefined

Не должно. С чего бы. Вот твой пример, упрощенный:

function Apple() {
    this.color = 'green';
}

Apple.color // undefined
var apple = new Apple();
apple.color // green


Ты не понимаешь почему так происходит - бегом учить основы. Что такое функция, что такое конструктор и т.д.

borodatych 07.12.2014 12:38

Я просто запутался...

Вот это:
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 ??!

danik.js 07.12.2014 12:41

Иди читай что такое функция.

danik.js 07.12.2014 12:42

И как ее вызвать. Где у тебя вызов функции Instance?


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