Trước khi đọc nội dung bài viết này, bạn nên ôn lại kỹ năng về object cùng prototype vào Javacript.Trước khi phân tích về OOP trong JavaScript, mình sẽ nhắclại sơ 1 số đặc điểm trongOOP. Bạn đang xem: Lập trình hướng đối tượng javascript pdf
Các đặc điểm của OOP

Trong lập trình sẵn hướng đối tượng người tiêu dùng (OOP) có 4 tính chất là tính gói gọn (Encapsulation), tính thừa kế (Inheritance), tính đa hình (Polymorphism) với tính trừu tượng (Abstraction)
1.Encapsulation (Tính đóng góp gói):
Tính đóng là kỹ thuật giúp cho bạn che giấu được mọi thông tin phía bên trong đối tượng. Mục đích chính của tính gói gọn là giúp hạn chế những lỗi khi cải cách và phát triển chương trình.Tính chất này không cho phép người sử dụng các đối tượng chuyển đổi trạng thái nội tại của một đối tượng. Chỉ có những phương thức nội trên của đối tượng người sử dụng cho phép đổi khác trạng thái của nó. Việc được cho phép môi trường phía bên ngoài tác đụng lên những dữ liệu nội trên của một đối tượng người dùng theo cách nào là hoàn toàn tùy trực thuộc vào người viết mã. Đây là tính chất bảo vệ sự toàn vẹn của đối tượng.
Các công dụng chính mà lại tính đóng gói mang lại:
Hạn chế được các truy xuất chưa hợp lệ tới những thuộc tính của đối tượng.Giúp mang đến trạng thái của đối tượng luôn đúng.Giúp ẩn đi những thông tin không quan trọng về đối tượng.Cho phép bạn đổi khác cấu trúc bên phía trong lớp mà không ảnh hưởng tới lớp khác.2.Inheritance(Tính kế thừa):
Kế thừa trong lập trình phía đối tượng chính là thừa tận hưởng lại phần đông thuộc tính và cách làm của một lớp. Tức là nếu lớp A kế thừa lớp B thì lớp A sẽ có được những trực thuộc tính và thủ tục của lớp B.Lớp được thừa kế những nằm trong tính và cách làm từ lớp không giống được gọi là dẫn xuất (Derived Class) hay lớp con (Subclass) cùng lớp bị lớp khác thừa kế được gọi là lớp các đại lý (Base Class) hoặc lớp phụ thân (Parent Class).
Các tiện ích của tính kế thừa:
Giúp tái thực hiện lại code.Tăng tài năng mở rộng của chương trình.3.Polymorphism(Tính nhiều hình):
Tính đa hình thể hiện trải qua việc gửi các thông điệp (message). Việc gửi các thông điệp này hoàn toàn có thể so sánh như bài toán gọi những hàm phía bên trong của một đối tượng. Những phương thức dùng trả lời cho một thông điệp đang tùy theo đối tượng người sử dụng mà thông điệp này được gửi tới sẽ có được phản ứng khác nhau. Người lập trình rất có thể định nghĩa một công năng (chẳng hạn thông qua tên của những phương thức) cho 1 loạt các đối tượng người tiêu dùng gần nhau cơ mà khi thực hiện thì sử dụng cùng một tên thường gọi mà sự thực hành của mỗi đối tượng sẽ tự động hóa xảy ra tương xứng theo công dụng của từng đối tượng người dùng mà không trở nên nhầm lẫn.
4. Abstraction(Tính trừu tượng):
Tính trừu tượng là một trong những tính chất mà chỉ tập trung vào những công dụng của đối tượng người tiêu dùng và ẩn đi những thông tin không phải thiết. đặc thù này giúp đỡ bạn trọng trung ương hơn vào những chức năng thay vày phải nhiệt tình tới bí quyết mà nó được thực hiện.
Trong phạm vi nội dung bài viết này, bọn họ sẽ bàn về 3đặc tính củaOOP (tính đóng gói, tính kế thừa, tính đa hình), đối chiếu cách hiện tại thựcchúng vào Java vàJavaScript.
OOP trong Java
Như các bạn đã biết, Java là một trong những ngôn ngữ phía đối tượng, do đó việc hiện thực những đặc tính OOP rất đơn giản dễ dàng và nhanh gọn, dễ hiểu.
1. Tính đóng gói
Tính bao đóng trong Java thể hiện bằng cách để phạm vi truy vấn của các thuộc tính là private cùng truy xuất tới những thuộc tính này trải qua phương thức public (gọi là các setter, getter).
Xem thêm: Bà BầU Nên Uá»Ng SữA Tæ°Æ¡I Vào Lúc Nào ÄÁ» Khá»E Cho Mẹ Tá»T Cho Con?
Ví dụ:
class Student private String name; private int age; private double gpa; public String getName() return name; public void setName(String name) this.name = name; public int getAge() return age; public void setAge(int age) this.age = age; public double getGpa() return gpa; public void setGpa(double gpa) this.gpa = gpa; Với cách làm này tin tức của đối tượng người tiêu dùng đã được ẩn đi, chúng ta chỉ hoàn toàn có thể giao tiếp với đối tượng người tiêu dùng thông qua các phương thức. Điều này cũng tương tự như với thực tế. Ví dụ khi bạn gặp mặt một fan lạ thì các bạn không thể biết được những thuộc tính của tín đồ này (số năng lượng điện thoại, sở thích, ...), đề cập cả khi chúng ta hỏi thì người này cũng chưa chắc đã trả lời cho chính mình đúng sự thật (giống như cách thức không trả về quý giá thực nằm trong tính nhưng trả về một quý hiếm khác).
2. Tính kế thừa
Trong Java, để kế thừa một lớp chúng ta dùng từ bỏ khóa extends.
Ví dụ:
class Person private String name; private int age; public void setName(String name) this.name = name; public String getName() return name; public void setAge(int age) this.age = age; public int getAge() return age; class Student extends Person private double gpa; public void setGpa(double gpa) this.gpa = gpa; public double getAge() return gpa; class Entry public static void main(String<> args) Student s = new Student(); s.setName("Khoa"); s.setAge(19); s.setGpa(10); System.out.println("Name: " + s.getName()); System.out.println("Age: " + s.getAge()); System.out.println("GPA: " + s.getGpa()); Kết quả khi chạy chương trình:
Name: KhoaAge: 19GPA: 10.0Có thể thấy rằng lớp Student sẽ được thừa hưởng những cách thức của lớp Person.
3. Tính nhiều hình
Tính nhiều hình vào code bên dưới 3 hình thức: nạp chồng phương thức, ghi đè cách làm và đa hình thông qua các đối tượng người sử dụng đa hình(polymorphic objects).
Ví dụ về tính đa hình cùng với nạp chồng phương thức:Phương thức cộng sẽ sở hữu các "forms" là cùng 2 số nguyên, cộng 2 số thực, cộng 3 số nguyên, v.v.. Có thể thấy thuộc là cách tiến hành cộng nhưng lại sở hữu nhiểu kiểu khác biệt nên đây chính là biểu hiện của tính nhiều hình.
package OOP;class Calculator public int add(int a, int b) return a + b; public double add(double a, double b) return a + b; public int add(int a, int b, int c) return a + b + c; public class Entry public static void main(String<> args) Calculator s = new Calculator(); System.out.println(s.add(1, 2)); System.out.println(s.add(2.1, 2.4)); System.out.println(s.add(1, 2, 3)); Kết quả khi chạy chương trình:
34.56
OOP trong Javascript
Javascript thì khác, không phải như Java, chúng ta cần phải vận dụng một vài thủ thuật để triển khai các công dụng này.1. Tính đóng góp gói
Trong Javascript, để tiến hành tính bao đóng, ta có thể tạo ra 1 Constructor Function,đóng gói cục bộ các trường với hàm vào 1 object. Thông thường, chúng ta hay khai báo như sau:
function Person(firstName, lastName) this.firstName = firstName; this.lastName = lastName; this.showName = function() console.log(this.firstName + " " + this.lastName); ;var psn1 = new Person("Khoa", "Nguyen");// những property khai báo vào trở nên this có thể bị truy hỏi xuất từ mặt ngoài// object không thể bao đóng góp nữapsn1.firstName = "changed";console.log(ps1.firstName); // changedVới những khai báo này, tính bao đóng góp không được đảm bảo. Những property có thể bị truy vấn cập, thayđổi từ bên ngoài. Ở đây, ta phảisử dụng vươn lên là cục bộ.
function Person(firstName, lastName) var fstName = firstName; var lstName = lastName; this.setFirstName = function(firstName) fstName = firstName; ; this.getFirstName = function() return fstName; ; this.setLastName = function(lastName) lstName = lastName; ; this.getLastName = function() return lstName; ;var person1 = new Person("Khoa", "Nguyen");console.log(person1.fstName); // Undefined, không thể truy cập đượcconsole.log(person1.getFirstName()); // KhoaCác biến viên bộ này chỉ rất có thể truy xuất vào Constructor Function, nó tương tự với các trường private vào Java.
Trong javascript, không tồn tại cách như thế nào để tạo nên các ngôi trường protected (Chỉ có thể truy cập trường đoản cú class kế thừa) như Java vàC#được.
2. Tính kế thừa
Trong Javascript không có từ khóa extends cũng giống như class, vậy nênPrototype (and Prototype chains) là việc triển khai tính kế thừa đối tượng của Javascript.
Ví dụ:
function Person() this.firstName = "Per"; this.lastName = "son"; this.sayName = function() return this.firstName + " " + this.lastName ;// Viết một Constructor Function khácfunction SuperMan(firstName, lastName) this.firstName = firstName; this.lastName = lastName;// Ta muốn anh hào sẽ kế thừa các thuộc tính của Person// sử dụng prototype nhằm kế thừaSuperMan.prototype = new Person();// tạo thành một object mới bằng Constructor Function var sm = new SuperMan("Khoa", "Nguyen");sm.sayName(); // Khoa Nguyen. Hàm này thừa kế từ prototype của PersonKhi trình thông dịch JS kiểm tra thuộc tính đối tượng người sử dụng định nghĩa mang đến nó, trước hết nó kiểm bình chọn object trước. Ví như object không tồn tại thuộc tính được định nghĩa, nó vẫn kiểm traprototypecủa đối tượng với cùng thuộc tính, ví như nó được kiếm tìm thấy, nó đang trả về nằm trong tính đó.Nó khác với OOP vào Java là prototype object hoàn toàn có thể truy cập vào đối tượng người sử dụng tạo ra trước vào sau bất kể khi nào có sự chuyển đổi nào bên trên prototype
function Bread() ; // constructor functionlet brownBread = new Bread(); // object of type "Bread"let sodaBread = new Bread(); // object of type "Bread"Bread.prototype.toast = function() console.log("I am toasting!"); ; // set the function on a toast property on the prototype// inherited prototype is accessible!brownBread.toast(); // I am toasting!sodaBread.toast(); // I am toasting!
3. Tính nhiều hình và trừu tượng
Đối với tính đa hình và tính trừu tượng, việc vận dụng 2 đặc thù này vào Javascript là không rõ ràng. Do đó mình vẫn không trình diễn trong bài viết nàyViệc áp dụng lập trình hướng đối tượng vào JavaScript là tương đối khó. Tuy nhiên, nếu bạn nắm vững những kỹ năng cơ bản mà mình đã trình diễn trên đây, thì mình tin chắc chắn rằng các bạn sẽ dễ dàng tham khảo thêm và vận dụng lập trình hướng đối tượng người tiêu dùng trong JavaScript.
Tạm kết
Như vậy trong nội dung bài viết này, họ đã cùng tìm hiểu vềOOP trongjavascript.Bạn thấy thế nào về JS, hãy giới thiệu những ý kiến trong quá trình sử dụng js nhé. Nếu chúng ta thấy nội dung bài viết hữu ích hãy rate 5* và tóm tắt cho mọi người tham khảo!
Hãy nhằm lại bình luận để mình có thể hoàn thiện bản thân hơn trong tương lai. Cám ơn những bạn!