可以看到,我們定義了一個Person類,其有三個屬性(name, age, gender)和一個方法sayHello。通過new Person()來實例化Person類,我們創(chuàng)建了兩個新的對象person1和person2,后者的屬性值沿用了類的默認值。 使用類實例,我們可以方便地創(chuàng)建具有相同屬性和方法的對象,節(jié)省了我們手動編寫重復代碼的時間。 除此之外,類實例還能夠?qū)︻悓ο筮M行繼承,即從一個類獲得所有屬性和方法,再按照自己的特殊需求添加或修改屬性和方法,從而得到更為大范圍、具體的對象。class Person {
constructor(name, age, gender) {
this.name = name;
this.age = age;
this.gender = gender;
}
sayHello() {
console.log(`Hello, my name is ${this.name}!`);
}
}
const person1 = new Person('Tom', 20, 'male');
const person2 = new Person('Jerry', 21, 'female');
person1.sayHello(); // Hello, my name is Tom!
person2.sayHello(); // Hello, my name is Jerry!
在上述代碼中,我們定義了一個Animal類,其有一個屬性name和兩個方法get name()和set name()。這兩個方法分別用于獲取和修改name屬性,看起來和普通的屬性一樣。但是需要注意的一點是,這里的實際上是_es6-class中的語法糖,我們在這里實際上是定義兩個方法,而不是一個屬性。這是為了方便使用和統(tǒng)一語言的表示。 然后我們定義了一個Dog類,它繼承了Animal類,并添加了一個sayHello()方法以及刪除了get name()方法。在創(chuàng)建Dog對象時,我們只需要傳遞name值,就可以從Animal中取得所有屬性和方法,得到更具體的對象。 從以上例子可以看出,類實例可以借助繼承實現(xiàn)靜態(tài)功能的復用,使程序的可維護性和重用率的提高。 當然,JavaScript中的類實例遠不止以上內(nèi)容,我們還可以借助類實例實現(xiàn)許多其它功能,如封裝、多態(tài)、數(shù)據(jù)封裝等等。總的來說,類實例是JavaScript面向?qū)ο缶幊痰淖罨A(chǔ)、最重要的概念之一,在實際編寫程序時,其功能是十分豐富強大的。 因此,對于Web開發(fā)人員來說,學習類實例的概念是非常必要的,可以為我們的編程工作帶來深刻的理論基礎(chǔ)和實踐習慣,塑造編程思想的專業(yè)性和正規(guī)性。class Animal {
constructor(name) {
this.name = name;
}
get name() {
console.log(`I am ${this._name}.`);
}
set name(name) {
this._name = name.toLowerCase();
}
}
class Dog extends Animal {
constructor(name) {
super(name);
}
sayHello() {
console.log('Hello, I am a dog!');
}
}
const dog = new Dog('Buddy');
dog.sayHello(); // Hello, I am a dog!
dog.name; // I am buddy.