Может ли кто-нибудь подтвердить, действительно ли скрипт ниже соответствует правильному пути для наследования классов в 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'
Возможный дубликат [Javascript получить имя функции?] (Http://stackoverflow.com/questions/2648293/javascript-get-function-name) – Hexaholic
Ваш код печатает 'undefined' – shyam
Какое имя переменной вы хотите распечатать ? Имя самой функции? –