Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript &引用;[对象对象]”;字符串类型_Javascript_Function_Object_Prototype - Fatal编程技术网

Javascript &引用;[对象对象]”;字符串类型

Javascript &引用;[对象对象]”;字符串类型,javascript,function,object,prototype,Javascript,Function,Object,Prototype,我正在上一门关于“Javascript:理解奇怪的部分”的课程,遇到了一个让我无法前进的问题。我正在构建一个小的js框架。它有一个简单的结构: (function (global, $){ var Greetr = function(firstName, lastName, language){ return new Greetr.init(firstName, lastName, language); } Greetr.prototype = {};

我正在上一门关于“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));
向控制台输出strin类型的“[object]”

我错过什么了吗?你能帮我找出解决办法吗

提前谢谢你

更新#1 我期待一个对象,这样我就可以在Chrome的控制台中浏览它,就像你在其中键入“window”一样

更新#2 令人惊讶的是,错误在于将我的对象命名为“name”:

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

一旦我把它改名为其他东西,它就工作得很好

name是包含firstName、lastName和language的对象。
name.firstName应该为您提供firstName“John”的值。

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

console.log (name.toString ()) ;
或者使用json格式

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

您可以使用以下命令记录对象:

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

Name是一个对象,因此要获得正确的输出,您必须覆盖
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;
}

添加一个toString函数
Greetr.init.prototype.toString=function(){返回this.firstName+''+this.lastName;}。顺便说一句,
Greetr.prototype
在这里是无用的,您只需要定义
Greetr.init.prototype
// 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;
}