2011-09-25 69 views
0

我必须对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在这两种情况下和h在这两种情况下,ow都可以让它成为LessonProvider吗?

回答

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); 
1

如果你insist-

LessonProvider.prototype = new ContentProvider() 
LessonProvider.prototype.constructor=LessonProvider; 
相关问题