Javascript &引用;[对象对象]”;字符串类型
我正在上一门关于“Javascript:理解奇怪的部分”的课程,遇到了一个让我无法前进的问题。我正在构建一个小的js框架。它有一个简单的结构: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 = {};
(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;
}