" [对象]"字符串

时间:2016-01-12 08:37:11

标签: javascript function object prototype

我正在学习Udemy" Javascript:理解怪异部分"的课程,并遇到了一个不让我前进的问题。我正在构建一个小型的js框架。这有一个简单的结构:

(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);

输出到控制台:&#34; [对象]&#34;,strin类型。

我错过了什么吗?请你帮我找出解决方案吗?

提前谢谢!

更新#1 我期待一个对象,以便我可以在Chrome控制台中浏览它,就像你输入&#39; window&#39;在它。

更新#2 令人惊讶的是,错误在于命名我的对象&#39; name&#39;:

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

一旦我将其重命名为其他内容,它就可以正常使用了!

4 个答案:

答案 0 :(得分:4)

name是一个Javascript对象,因此您不能按原样回显它,因为它不是标量变量。对象可能具有大型结构和父子引用。如果你想回显一个对象值,你可以在你的类中实现一个toString()方法来构建一个你可以使用的字符串,

console.log (name.toString ()) ;

或使用json格式。

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

答案 1 :(得分:1)

name是一个包含firstName,lastName,language的Object。 name.firstName应该为您提供firstname&#34; John&#34;。

的值

答案 2 :(得分:1)

您可以使用以下方式记录对象:

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

答案 3 :(得分: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;
}