Kế thừa là một khái niệm được sử dụng hầu hết ở các ngôn ngữ lập trình. Trong Javascript cũng vậy. Bài viết này tôi sẽ hướng dẫn các bạn cách sử dụng kế thừa trong Javascript.
Khi bạn tạo phương thức hay thuộc tính public cho đối tượng thông qua đối tượng prototype, bạn có thể kế thừa lại nó thông qua một đối tượng khác. Ví dụ sau sẽ trình bày về kỹ thuật này.
Khi bạn tạo phương thức hay thuộc tính public cho đối tượng thông qua đối tượng prototype, bạn có thể kế thừa lại nó thông qua một đối tượng khác. Ví dụ sau sẽ trình bày về kỹ thuật này.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
| // Create the constructor for a Person object // Tạo cấu trúc cho đối tượng Person function Person(name, password) { this.name = name; this.password = password; } // Thêm phương thức mới cho đối tượng Person Person.prototype.getName = function () { return this.name; }; Person.prototype.getPassword = function () { return this.password; }; Person.prototype.getLevel = function () { return this.level; }; // Thêm thuộc tính cho đối tượng Person Person.prototype.level = 'admin' ; // Tạo cấu trúc cho đối tượng User function User(name) { // Tạo thuộc tính cho User this.name = name; }; // Đối tượng User thừa kế tất cả các phương thức, // thuộc tính của đối tượng Person được tạo thông qua prototype User.prototype = new Person(); // Tạo đối tượng var person = new Person( 'khoi' , '789' ); var user = new User( 'Teo' , '123456' ); alert(user.getName()); // Teo alert(user.getLevel()); // admin alert(user.getPassword()); // Chưa định nghĩa(undefined) alert(person.getName()); // khoi |
Qua ví dụ trên bạn có thể thấy được đối tượng User đã kế thừa lại 3 phương thức của đối tượng Personđược tạo thông qua prototype và nó cũng kế thừa luôn thuộc tính level của đối tượng Person.
Đối tượngUser kế thừa phương thức getName() từ đối tượng Person nhưng kết quả trả về là thuộc tính name của đối tượng User từ đây bạn chú ý một điều là nó không kế thừa lại thuộc tính được tạo bên trong đối tượng Person.
Mặc dù đối tượng User đã kế thừa phương thức getPassword() từ đối tượng Person nhưng trong phương thức getPassword() có trả về thuộc tính password mà nó chưa được định nghĩa ở đối tượng Usernên bạn sẽ nhận được kết quả undefined.
Mặc dù đối tượng User đã kế thừa phương thức getPassword() từ đối tượng Person nhưng trong phương thức getPassword() có trả về thuộc tính password mà nó chưa được định nghĩa ở đối tượng Usernên bạn sẽ nhận được kết quả undefined.