0
有人可以確認如果下面的腳本確實是JavaScript內類繼承的正確方法嗎?這是Javascript中類繼承的正確方法嗎?
錯誤的方式
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 get Function Name?]可能重複(http://stackoverflow.com/questions/2648293/javascript-get-function-name) – Hexaholic
您的代碼打印'undefined' – shyam
您打算打印哪個變量名稱?函數本身的名字? –