2011-09-25 71 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; 
相關問題