类(class)是在JS中编写构造函数的新方法。它是使用构造函数的语法糖,在底层中使用仍 然是原型和基于原型的继承。
//ES5 Version
function Person(firstName, lastName, age, address) {
this. firstName = firstName;
this. lastName = lastName;
this.age = age;
this. address = address;
}
Person. self = function() {
return this;
}
Person. prototype. toString = function () {
return "[object Person]";
}
Person, prototype. getFullName = function (){
return this. firstName + " " + this. lastName;
}
//ES6 Version
class Person {
constructor(firstName, lastName, age, address) {
this. lastName = lastName;
this. firstName = firstName;
this. age = age;
this. address = address;
}
static self() {
return this;
}
toString () {
return "[object Person]";
}
getFullName(){
return {this. firstName} {this. lastName}
}
}
重写方法并从另一个类继承。
//ES5 Version
Employee.prototype = Object.create (Person. prototype);
function Employee(firstName, lastName, age, address, jobTitle, yearStarted) {
Person. call (this, firstName, lastName, age, address);
this.jobTitle = jobTitle;
this. yearStarted = yearStarted;
}
Employee. prototype. describe = function () {
return I am {this. getFulIName ()} and I have a position of {this. jobTitle} and I started at
${this. yearStarted}
}
Employee. prototype. toString = function () {
return "[object Employee]";
}
//ES6 Version
class Employee extends Person { //Inherits from "Person" class
construetor(firstName, lastName, age, address, jobTitle, yearStarted) {
super(firstName, lastName, age, address);
this. jobTitle = jobTitle;
this. yearStarted = yearStarted;
}
describe () {
return I am {this. getFulIName()} and I have a position of{this. jobTitle} and I started at ${this. yearStarted};
}
toString() { // Overriding the "toString" method of "Person"
return "[object Employee]";
}
}
所以我们要怎么知道它在内部使用原型?
class Something {
}
function AnotherSomething() {
}
const as = new AnotherSomething();
const s = new Something();
console. log(typeof Something); // "function"
console. log(typeof AnotherSomething); // "function"
console. log (as. toString()) ; // " [object Object]"
console. log (as. toString()) ; // " [object Object]"
console. log(as. toString = Object, prototype. toString); // true
console. log(s. toString = Object, prototype. toString) ; // true

Was this helpful?

0 / 0

发表回复 0

Your email address will not be published.