2015-05-06 4 views
0

Может ли кто-нибудь подтвердить, действительно ли скрипт ниже соответствует правильному пути для наследования классов в Javascript?Является ли это правильным способом для наследования классов в Javascript?

НЕПРАВИЛЬНО WAY

var Person = function() { 
    this.className = this.constructor.toString().match(/^function ([a-z_0-9]+)\(/i)[1]; 
    console.log(this.className); //ERROR 
} 

var Mark = function() { 
    Person.call(this); 
} 

Mark.prototype    = Object.create(Person.prototype); 
Mark.prototype.constructor = Mark; 

new Person; // I LIKE TO DISPLAY 'Person' 
new Mark; // I LIKE DISPLAY 'Mark' 

ПРАВИЛЬНЫЙ ПУТЬ

function Person() { 
    this.className = this.constructor.toString().match(/^function ([a-z_0-9]+)\(/i)[1]; 
    console.log(this.className); 
} 

function Mark() { 
    Person.call(this); // Class Mark extend Person 
} 

Mark.prototype    = Object.create(Person.prototype); 
Mark.prototype.constructor = Mark; 

function Matteo() { 
    Mark.call(this); // Class Matteo extend Mark 
} 

Matteo.prototype    = Object.create(Mark.prototype); 
Matteo.prototype.constructor = Matteo; 

new Person; // Displays: 'Person' 
new Mark; // Displays: 'Mark' 
new Matteo; // Display: 'Matteo' 
+1

Возможный дубликат [Javascript получить имя функции?] (Http://stackoverflow.com/questions/2648293/javascript-get-function-name) – Hexaholic

+0

Ваш код печатает 'undefined' – shyam

+1

Какое имя переменной вы хотите распечатать ? Имя самой функции? –

ответ

3

Это работает для меня:

function Person() { 
 
    console.log(this.constructor.toString().match(/^function ([a-z_0-9]+)\(/i)[1]); 
 
} 
 

 
function Mark() { 
 
    Person.call(this); 
 
} 
 

 
function Matteo() { 
 
    Mark.call(this); 
 
} 
 

 
new Person(); // "Person" 
 
new Mark(); // "Mark" 
 
new Matteo(); // "Matteo"

+0

Спасибо за вклад, не могли бы вы ответить на новый вопрос? – Mark

+0

См. Мое редактирование, оно все еще работает –

 Смежные вопросы

  • Нет связанных вопросов^_^