在我的js文件中形成一个对象'myclass',如下所示:
var myclass = function(){
this.m1 = function(){
return "THis is m1 of myclass"
};
return "this is myclass";
}
myclass.prototype.mp1 = function(){
return "this is mp1 of myclass"
}
现在我这样做:
var a = new myclass();
var b = new myclass;
Q1-我看不出这两者的行为有什么不同。请解释原因。
Q2 - 当我这样做 - console.log(a)时,我希望在控制台中得到“这是myclass”,而是看到[object object]。
Q3 - 如果我从'myclass'的构造函数返回一个对象(例如 - return {x:1}),那么我就不能再使用'myclass'实例中的'm1'或'mp1'了。
Q4 - 将此与Window对象的Date类进行比较,这是完全不同的行为。如果a = new Date(),那么我将'a'的值视为日期,尽管类型是一个对象,这指向我的下一个问题。
Q5 - 日期类返回一个看起来像DOM中字符串的日期,但日期类实例的“typeof”是一个对象。为什么?
很抱歉一次发布这么多问题,但如果我得到所有问题的答案,我认为它们是相关的,那就太好了。
这个问题不是关于上面的特定问题5.但是所有的组合。因为我必须知道返回类型,myclass()和myclass之间的比较,以及myclass()和Date()/预定义窗口对象之间的比较。
答案 0 :(得分:0)
首先,我建议你阅读Introduction_to_Object-Oriented_JavaScript 你会找到很多答案。
快速:
Q1-我看不出这两者的行为有什么不同。请解释原因。
在您的用例中也是如此,因为您的构造函数不需要参数。
Q2 - 当我这样做 - console.log(a)时,我希望得到"这是myclass"在控制台中,但我看到[对象对象]。
这是因为您尝试记录Object而不是函数的结果
你应该这样做:console.log( a.m1() );
简单地说:你为什么这样做?为构造函数返回除了实例之外的其他内容?Q3 - 如果我从' myclass'(例如 - return {x:1})的构造函数返回一个对象,那么我就不能使用' m1'或者' mp1'来自“myclass'。
的实例。”
Q4 - 将此与Window对象的Date类进行比较,这是完全不同的行为。如果a = new Date(),那么我会看到' a'作为一个日期,虽然类型是一个对象,这指向我的下一个问题。
实际上每个对象都有一个内置函数toString
,当你尝试转换/打印"时会调用它。字符串的对象。
修改的
来自Ward D.S的评论的致电时:console.log(myDate);
地下是console.log( myDate.toString() )
这就是你看日期字符串的原因。
如果您想要添加相同的行为:
var MyClass = function(){
this.name = 'i am a MyClass';
}
MyClass.prototype.toString= function(){ return this.name };
var a = new MyClass();
document.write (a)

Q5 - 日期类返回的日期在DOM中看起来像一个字符串但是' typeof'日期类的实例是一个对象。为什么?
因为javascript中的所有内容都是对象