在为其原型分配另一个对象的实例时,在Javascript中获取对象的类型

时间:2011-09-25 05:09:31

标签: javascript oop prototype-programming

我必须对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?

2 个答案:

答案 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);