我必须对Javascript中的对象如何工作有一些基本的误解,因为我无法弄清楚为什么以下输出它的作用。您可以在此处查看以下代码的jsfiddle:http://jsfiddle.net/VivekVish/8Qvkn/1/
请注意,它使用此处定义的getName函数:How do I get the name of an object's type in JavaScript?
Object.prototype.getName = function()
{
var funcNameRegex = /function (.{1,})\(/;
var results = (funcNameRegex).exec((this).constructor.toString());
return (results && results.length > 1) ? results[1] : "";
};
function ContentProvider()
{
}
function LessonProvider()
{
console.log(this.getName());
}
lessonProvider1 = new LessonProvider();
LessonProvider.prototype = new ContentProvider();
lessonProvider2 = new LessonProvider();
以上代码将以下内容输出到控制台:
LessonProvider
的ContentProvider
但是为什么不是两种情况下的LessonProvider,以及如何在两种情况下都使用LessonProvider?
答案 0 :(得分:1)
如果你坚持 -
LessonProvider.prototype = new ContentProvider()
LessonProvider.prototype.constructor=LessonProvider;
答案 1 :(得分:1)
如果不重置指向构造函数的指针,则所有子节点都将报告父对象是其构造函数。
LessonProvider.prototype.constructor = LessonProvider;
您可能想尝试使用下面的函数进行继承:
function inherit(C, P) {
//empty function used as a proxy
var F = function() {};
//set F's prototype equal to P's prototype
F.prototype = P.prototype;
//C will only inherit properties from the F's prototype
C.prototype = new F();
//set access to the parents (P's) prototype if needed
C.uber = P.prototype;
//Set the constructor back to C
C.prototype.constructor = C;
}
inherit(LessonProvider, ContentProvider);