2011-09-25 2 views
0

다음과 같은 결과가 나오는 이유를 알 수 없기 때문에 객체가 Javascript에서 작동하는 방식에 대한 근본적인 오해가 있어야합니다. getName 기능이 여기에 정의 http://jsfiddle.net/VivekVish/8Qvkn/1/프로토 타입에 다른 객체의 인스턴스가 할당되었을 때 자바 스크립트에서 객체 유형 얻기

주입니다 사용합니다 : 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(); 

위의 코드는 콘솔에 다음과 같은 출력 : 현재 다음과 같은 코드의 jsfiddle을 볼 수 있습니다

LessonProvider

ContentProvider

하지만 왜 LessonProvider가 두 경우 모두 h가 아닌가? ow는 두 경우 모두 LessonProvider로 만들 수 있습니까?

답변

1

insist- 경우, 모든 아이들은 부모 객체가 생성자 것을보고합니다.

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

생성자에 대한 포인터를 재설정하지 않으면

LessonProvider.prototype = new ContentProvider() 
LessonProvider.prototype.constructor=LessonProvider; 
관련 문제