2016-01-12 2 views
2

Я беру курс на Udemy «Javascript: Understanding the Weird Parts» и столкнулся с проблемой, которая не позволит мне двигаться вперед. Я создаю небольшую структуру js. Это имеет простую структуру:«Объект объекта» типа String

(function (global, $){ 
    var Greetr = function(firstName, lastName, language){ 
     return new Greetr.init(firstName, lastName, language); 
    } 

    Greetr.prototype = {}; 

    Greetr.init = function(firstName, lastName, language){ 

     var self = this; 

     self.firstName = firstName || "<first name>"; 

     self.lastName = lastName || "<last name>"; 

     self.language = language || "en"; 

    } 

    Greetr.init.prototype = Greetr.prototype; 

    global.Greetr = global.G$ = Greetr; 

}(window,jQuery)); 

Когда я пытаюсь использовать мои рамки, я получаю неожиданный результат:

var name = Greetr("John", "Doe"); 
console.log(name); 

выводит на консоль: «[объект Object]», типа Strin ,

Я что-то упустил? Можете ли вы помочь мне разобраться в решении?

Спасибо заранее!

UPDATE # 1 Я ожидаю объект, так что я могу просматривать его в консоли Chrome, так же, как если вы наберете «окно» в нем.

UPDATE # 2 Удивительно, ошибка в обозначении моего 'имя' объекта:

var name = G$("John", "Doe"); 

После того, как я переименовал его к чему-то еще, он работал просто отлично!

+0

Добавить функцию ToString. 'Greetr.init.prototype.toString = function() {return this.firstName + '' + this.lastName; }; '. Btw, 'Greetr.prototype' здесь бесполезен, и вам нужно только определить' Greetr.init.prototype'. – Louy

ответ

4

имя - это объект Javascript, поэтому вы не можете его эхо-эхо, поскольку оно не является скалярной переменной. Объект может иметь большую структуру и ссылки parent-child. Если вы хотите повторить значение объектов, вы можете реализовать метод ToString() в своем классе, который построить строку, которую вы можете использовать,

console.log (name.toString()) ; 

или использовать формат JSON.

console.log (JSON.stringify (name)) ; 
1

имя - это объект, который содержит firstName, lastName, язык. name.firstName должно дать вам значение firstname "John".

1

вы можете войти объект с этим:

function clog (data){ 
    console.log(JSON.stringify(data, undefined, 2)); 
} 
clog(name); 
1

Имя является объектом так, чтобы получить правильный вывод, который вы получили, чтобы переопределить toString:

// toString override added to prototype of your class 
yourClass.prototype.toString = function() 
{ 
    // return "[object yourclass]"; this is normally what it will return 
    return this.firstName + ' ' + this.lastName; 
}