我正在学习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");
一旦我将其重命名为其他内容,它就可以正常使用了!
答案 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;
}