Gọi lớp javascript

Lớp và nguyên mẫu 1- Xây dựng lớp trong JavaScript Trong quá trình thiết lập hướng đối tượng, chúng ta thường tạo các đối tượng đó từ các lớp (lớp), trong đó các đối tượng được coi là trường hợp nhất của một lớp. Cả hai ngôn ngữ Java và JavaScript đều được cung cấp


Lớp và nguyên mẫu


1- Xây dựng lớp trong JavaScript


Trong quá trình thiết lập hướng đối tượng, chúng ta thường tạo các đối tượng này từ các lớp (lớp), trong đó các đối tượng được coi như là trường hợp cụ thể của một lớp. Cả hai ngôn ngữ Java và JavaScript đều cung cấp cho chúng ta từ khóa mới được sử dụng để tạo khả năng hiển thị của một đối tượng đã được định nghĩa trước đó

Trong Java, mọi thứ đều là đối tượng và được phát triển từ lớp nguyên thủy là java. lang thang. Mục tiêu. Chắc chắn nếu bạn là người lập trình Java thì chắc chắn sẽ thấy các câu lệnh sau khá quen thuộc


[quote]    MyObject myObj=new MyObject(arg1,arg2);[/quote]


Với JavaScript cũng có cách khai báo rất giống như vậy


[quote]  var myObj= new MyObject(arg1, arg2);[/quote]


Nhưng có một sự khác biệt lớn về bản chất đó là chúng ta hoàn toàn không định nghĩa lớp MyObject như trong Java mà thay vào đó là một hàm thực sự có cùng tên

[quote]    chức năng MyObject(){
//làm gì đó ở đây
}

[/trích dẫn]

Để minh họa cho điều này, hãy xem xét ví dụ sau khi khai báo một lớp Động vật với các thuộc tính đơn giản như tên, thức ăn và phương thức đơn giản là ăn

chức năng Động vật(tên, thức ăn){

//Thuoc tính
cái này. tên=tên;
cái này. thức ăn = thức ăn;

//Phương thức
cái này. ăn=chức năng(cái gì đó){
   

if(something===food){ //If thức ăn phù hợp

alert('Món này ngon lắm');

}khác{

alert("Tôi không thích điều này");

}

}

}

var myAnimal = new Animal("Mèo","Chuột");

myAnimal. eat("Mouse");// Món này rất ngon

Trong ví dụ trên, một lần nữa ta sử dụng từ khóa này, với cấu trúc trên thì ta có thể hiểu đây là đối tượng được tạo ra sau từ khóa mới

Tất nhiên với cách khai báo như vậy thì mọi công việc đều OK, nhưng nếu đi sâu hơn một chút chúng ta sẽ thấy. Đầu tiên, để mỗi lớp có thể hiện Animal mà chúng ta tạo ra, chúng ta cũng tạo ra một hàm eat() mới, điều này dẫn đến vấn đề về bộ nhớ và tốc độ xử lý nếu bạn có ý định tạo ra rất nhiều . ); . Chính vì vậy bây giờ ta hãy thử một cách khác an toàn hơn, và nó được biết đến với cái tên khá lạ tai. nguyên mẫu-cơ sở

2- Nguyên mẫu

Nguyên mẫu là gì vậy? . Các hàm cũng như các thuộc tính đều có thể kết hợp được với nguyên mẫu. Nguyên mẫu và từ khóa mới có thể làm việc giống nhau, khi một đối tượng được tạo bởi từ khóa mới thì tất cả các thuộc tính và phương thức nguyên mẫu đều được gắn vào đối tượng mới đó. Điều này nghe có vẻ lạ và rắc rối, nhưng khá hiệu quả

Ta build lại class Animal theo cách nguyên mẫu như sau

chức năng Động vật(tên, thức ăn){

//Thuoc tính

cái này. tên=tên;

cái này. thức ăn = thức ăn;

}

    Động vật. nguyên mẫu . ăn=chức năng(thứ gì đó){

nếu (cái gì đó === cái này. thức ăn){//If thức ăn phù hợp

alert('Món này ngon lắm');

}khác{

alert("Tôi không thích điều này");

}

}

var myAnimal = new Animal("Mèo","Chuột");

myAnimal. eat("Mouse");// Món này rất ngon

Như vậy đầu tiên chúng ta vẫn khai báo class với các thuộc tính bình thường, sau đó phản đối các phương thức ta chỉ việc gắn nó vào nguyên mẫu như trên. Khi chúng ta tạo ra một thể hiện của lớp thì phương thức được gắn vào đối tượng đó mà không phải tạo mới, và từ khóa này sẽ đảm bảo rằng trường thực phẩm là của đối tượng vừa tạo

Trong công việc thao tác với nguyên mẫu, có lưu ý là mọi đối tượng được tạo ra sau nguyên mẫu thì sẽ được gắn các thuộc tính hoặc phương thức được khai báo kiểu nguyên mẫu trước đó, ví dụ

myObject. nguyên mẫu. màu = "đỏ";

var myObj1=new myObject();

myObject. nguyên mẫu. màu = "màu xanh";

myObject. nguyên mẫu. âm thanh = "bùng nổ. “;

var myObj2=new myObject();

cảnh báo (myObj1. màu);

cảnh báo (myObj2. màu);

cảnh báo (myObj2. âm thanh);

cảnh báo (myObj1. âm thanh);

Khi đó myObj1 chỉ thuộc tính màu với giá trị là đỏ, còn myObj2 có thêm thuộc tính âm thanh và giá trị màu là xanh lam

    *Mở rộng đối tượng trong JavaScript

Trên thực tế, nguyên mẫu cơ chế còn có thể áp dụng cho các đối tượng xây dựng có sẵn trong JavaScript, ta có thể sử dụng nó để mở rộng các đối tượng này. Một ví dụ rất hữu ích là mở rộng mảng đối tượng như sau

Mảng. nguyên mẫu. indexof=function(obj){

kết quả var=-1;

for(var i=0;i

if(this[i]==obj){

trả lại tôi;

nghỉ;

}

}

trả về kết quả;

}

var ary=mảng mới();

ary=["một","hai","ba"];

cảnh báo (ary. indexof("một")) //0

Ví dụ trên, ta mở rộng Mảng bằng cách thêm vào một phương thức chỉ số tính chỉ số của một phần tử trong mảng, nếu đối tượng không có trong mảng thì trả về giá trị là -1;

3- Cơ chế của nguyên mẫu

Một câu hỏi sẽ được đặt ra là cơ chế hoạt động của nguyên mẫu như thế nào? . Mỗi khi bạn thực hiện thao tác với thuộc tính và phương thức của một đối tượng nào đó trong JavaScript, thì trình thông dịch sẽ thực hiện các bước tuần tự sau để xác định thuộc tính hoặc phương thức nào được thực thi

  • Nếu thuộc tính hay phương thức của đối tượng đang xét có giá trị hoặc đã được gán giá trị thì thuộc tính hay phương thức đó được sử dụng

  • Nếu không thì kiểm tra giá trị thuộc tính của nguyên mẫu trong cấu trúc của đối tượng

  • Cứ tiếp tục như vậy cho đến khi tìm thấy thuộc tính phù hợp (thuộc tính đã được gán giá trị) hoặc giá trị được tìm thấy là kiểu Đối tượng.

Chính vì vậy bất cứ khi nào muốn thêm một thuộc tính hoặc gắn thêm một phương thức mới cho một đối tượng bất kỳ ta chỉ việc khai báo nó như là thuộc tính của nguyên mẫu

Để biết rõ hơn điều này, chúng ta sẽ cùng nhau tìm hiểu sâu hơn một chút về các thuộc tính và phương thức của các đối tượng cài đặt sẵn bên trong JavaScript là Object và Function

a) Đối tượng

Thuộc tính

hàm tạo

nguyên mẫu

Phương thư

hasOwnProperty()

isPrototypeOf()

toString()

giá trị của()

toLocaleString()

Ở đây chúng ta chỉ cần lưu ý phương thức khá đặc biệt đó là hasOwnProperty();

WithOwnProperty() sẽ trả về giá trị true nếu đối tượng đang được xem xét có thuộc tính nào đó nhưng không phải thuộc tính được khai báo kiểu nguyên mẫu mở rộng, ví dụ

var myObj=đối tượng mới();

myObj. firstProperty="xyz";

myObj. nguyên mẫu. secondProperty="abc";

cảnh báo (myObj. hasOwnProperty("firstProperty")) //true

cảnh báo (myObj. hasOwnProperty("fdasffsdf")) //false

cảnh báo (myObj. hasOwnProperty("secondProperty")) //false

b) Chức năng

Thuộc tính

hàm tạo

nguyên mẫu

tranh luận

sự giàu có

người gọi

chiều dài

Phương thức

ứng dụng()

gọi()

toString()

giá trị của()

Với chức năng đối tượng, chúng ta sẽ tìm hiểu kỹ hơn một chút bởi có lẽ đây là đối tượng chính được sử dụng trong OOP OOP lập trình với JavaScript

    Thuộc tính constructor. Thuộc tính này trả về một hàm tạo mà từ đó đối tượng được tạo ra, ví dụ.

var myFunc=new Function();

cảnh báo (myFunc. hàm tạo);

Lưu ý rằng thuộc tính này chỉ có trong các biến có kiểu đối tượng, nên với một biến bất kỳ muốn sử dụng hàm tạo thì ta phải kiểm tra kiểu trước khi sử dụng, ví dụ

if(typeof myVar =="đối tượng"){

cảnh báo (myVar. hàm tạo);

}

    Đối số thuộc tính. đối số thực chất là một mảng chứa các tham số cho hàm, khi hàm được gán cho một đối số thì các đối số này sẽ được đưa vào đối số mảng, ta xem xét ví dụ sau.

kiểm tra hàm(){

var arg=kiểm tra. tranh luận;

for(var i=0;i

cảnh báo (arg [i]);

}

}

test(1,"a");// sẽ đưa ra giá trị 1 và sau đó là "a"

Để ý rằng hàm test ban đầu không khai báo tham số, nhưng khi chạy ta đã thêm hai tham số vào cho nó nên trong các đối số sẽ có 2 giá trị

    Phương thức call() và apply(). Đây là hai phương thức của hàm đối tượng, dùng để thực hiện hoặc gọi một hàm. Tham số đầu của hai phương thức trên thông thường là một đối tượng, cái mà sẽ được coi là đối tượng hiện tại và là tham số cho hàm thực thi phương thức call() hay apply(). Trong thực tế người ta thường sử dụng call thay cho apply bởi chức năng không có gì khác nhau, chỉ khác ở tham số truyền vào cho hai phương thức. Để minh họa điều này ta xét ví dụ sau.