Kế thừa từ prototype trong javaScript

Kế thừa từ prototype trong javaScript

Bài viết trước đã trình bày về những kỹ thuật căn bản để xây dựng ứng dụng javaScript theo hướng đối tượng, cách tạo và sử dụng thuộc tính, phương thức của đối tượng. Để có thể xây dựng code javaScript có thể dùng lại bài này sẽ giới thiệu về kỹ thừa kế trong javaScript thông qua đối tượng prototype.

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:

// Create the constructor for a Person object
// Tạo cấu trúc cho đối tượng Person
function Person(nam​e, 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('Ti', '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()); // Ti

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ượng User 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 User nên bạn sẽ nhận được kết quả undefined.

Tham khảo Apress.pro.javascript.techniques _ 2006 John Resig

Bạn thấy bài viết này như thế nào?: 
No votes yet
Ảnh của Khanh Hoang

Khanh Hoang - Kenn

Kenn is a user experience designer and front end developer who enjoys creating beautiful and usable web and mobile experiences.

Bình luận (0)

 

Add Comment

Filtered HTML

  • Các địa chỉ web và email sẽ tự động được chuyển sang dạng liên kết.
  • Các thẻ HTML được chấp nhận: <a> <em> <strong> <cite> <blockquote> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Tự động ngắt dòng và đoạn văn.

Plain text

  • No HTML tags allowed.
  • Các địa chỉ web và email sẽ tự động được chuyển sang dạng liên kết.
  • Tự động ngắt dòng và đoạn văn.
CAPTCHA
This question is for testing whether or not you are a human visitor and to prevent automated spam submissions.

Advertisement

 

jobsora

Dich vu khu trung tphcm

Dich vu diet chuot tphcm

Dich vu diet con trung

Quảng Cáo Bài Viết

 
Mozilla sẽ giới thiệu điện thoại đầu tiên tại MWC 2012?

Mozilla sẽ giới thiệu điện thoại đầu tiên tại MWC 2012?

Mozilla đã hợp tác với LG nhằm cho ra mắt thiết bị di động đầu tiên của họ tại MWC 2012, một nguồn tin thân cận đã xác nhận với trang ExtremeTech.

Cách tạo một trang Calendars trong Drupal 7

Cách tạo một trang Calendars trong Drupal 7

We're going to show you how to create an event calendar in Drupal. This tutorial is ideal for people who want to show a monthly, weekly or daily list of upcoming events.

Broadcom công bố VXL lõi tứ tích hợp 3G cho smartphone giá rẻ

Broadcom công bố VXL lõi tứ tích hợp 3G cho smartphone giá rẻ

Hãng sản xuất linh kiện bán dẫn Broadcom của Mỹ vừa chính thức công bố mẫu chip mới nhất có tên BCM23550 được tích hợp modem mạng 3G HSPA+ dành cho các dòng smartphone Android giá rẻ.

Công ty diệt chuột T&C

 

Diet con trung