2013-02-19 58 views
5

Tôi tìm thấy một mô tả tuyệt vời về sự khác biệt giữa ngữ nghĩa Properties và Methods (diễn giải, qua http://www.webdeveloper.com/forum/showthread.php?133712-Properties-Vs.-Methods):Ví dụ về thuộc tính so với phương pháp trong JS

Thuộc tính cũng giống như danh từ. Họ có một giá trị hoặc trạng thái.

Phương pháp giống như động từ. Họ thực hiện hành động.

Thuộc tính không thể thực hiện tác vụ và giá trị duy nhất mà phương thức có là phương thức được trả về sau khi hoàn thành việc thực hiện hành động.

ví dụ:

Thuộc tính: cửa; Giá trị có thể là: mở, đóng

Phương thức: openDoor; Action: để thay đổi giá trị tài sản cửa để "mở"

Tạo một ví dụ: Tôi hiểu điều này về mặt lý thuyết nhưng tôi không thể đưa ra một ví dụ. Có thể chỉ cho tôi cách cửa/openDoor xem xét mã Javascript thực tế không?

+0

Có lẽ bạn đang ở phía trước của chính mình; bạn nên đọc trên [Lập trình hướng đối tượng] (http://en.wikipedia.org/wiki/Object-oriented_programming) trước tiên, vì câu hỏi của bạn không dành riêng cho Javascript. Nếu sự khác biệt giữa dữ liệu và chức năng cũng không rõ ràng với bạn, bạn nên sao lưu hơn nữa. – lanzz

+1

Ngoài ra, tôi nghĩ sự khác biệt không thực sự áp dụng cho JS, như một phương thức * chỉ là một hàm được lưu trữ trong một thuộc tính (ngầm nhận được bối cảnh hàm được đặt cho đối tượng khi gọi nó là một phương thức). – Yoshi

+1

Nó không nhất thiết phải áp dụng cho JS để tôi tự hỏi nó hoạt động như thế nào trong ngôn ngữ cụ thể mà tôi hiện đang học. Tôi đánh giá cao các liên kết và lời khuyên, tôi sẽ xem xét thông qua các liên kết đó. Điều tôi đang cố gắng hiểu là ngữ nghĩa của JS, ** cách viết nó **, đó cũng là một phần quan trọng của quá trình. Mọi người đều có phong cách học tập riêng của họ và điều này thực sự sẽ giúp tôi hiểu JS. – jon

Trả lời

14

Thực sự, bạn cần sao lưu và đọc một số liên kết được đăng ở trên. Nhưng làm ví dụ nhanh:

var house = {} ; 

house.isDoorOpen = false ; 

house.openDoor = function(){ 
    house.isDoorOpen = true ; 
} 

Ở đây house là đối tượng. Đô thị này có một tài sản: house.isDoorOpen. Ở đây, nó giống như một tính từ. Cánh cửa mở (đúng) hoặc đóng (sai). Như nó âm thanh, nó mô tả một tài sản của ngôi nhà.

Ngoài ra, nó có phương thức openDoor (được sử dụng như sau: house.openDoor()). Đó là điều mà nó có thể làm. Trong trường hợp này, hành động openDoor ảnh hưởng đến thuộc tính isDoorOpen, làm cho nó trở thành sự thật.

+0

sự khác biệt b/w tài sản và các biến trong javascript là gì. Tất cả những gì tôi có thể nghĩ đến là: các biến đối tượng được gọi là các thuộc tính và tất cả mọi thứ ở bên ngoài là biến chúng ta không gọi chúng là các thuộc tính. – AbhimanyuAryan

+1

@ androidplusios.design Chúng tôi gọi các giá trị thuộc về đối tượng "thuộc tính". Tôi nghĩ rằng đây là một sử dụng hợp lý của tiếng Anh. "Ngôi nhà có tài sản có một cánh cửa mở" – ColBeseder

1

Hãy nhìn vào cách javascript đặc tả ECMA-262 mô tả tài sản dài

http://www.ecma-international.org/ecma-262/5.1/#sec-4.3.26

4.3.26 tài sản gắn

giữa tên và giá trị mà là một phần của một đối tượng

LƯU Ý Tùy thuộc vào biểu mẫu của thuộc tính, giá trị có thể là được biểu diễn trực tiếp dưới dạng giá trị dữ liệu (giá trị nguyên thủy, đối tượng hoặc đối tượng hàm) hoặc gián tiếp bởi một cặp hàm truy cập .

4.3.27 phương pháp

chức năng đó là giá trị của một tài sản

LƯU Ý Khi một hàm được gọi là một phương pháp của một đối tượng, đối tượng là truyền cho hàm như thế này của nó giá trị.

Cũng

định nghĩa của thuộc tính Javascript là khác nhau từ

4.3.29 thuộc tính của Java

giá trị nội bộ xác định một số đặc trưng của một tài sản


for in, vòng qua các thuộc tính đếm được của một đối tượng, và bao gồm các chức năng của mình

http://eloquentjavascript.net/1st_edition/chapter8.html

"Một hàm được gọi như một phương pháp khi nó được nhìn lên như một tài sản, và ngay lập tức gọi, như trong object.method(). "

Có vẻ như là một định nghĩa tiêu chuẩn hơn tài sản ..

https://en.wikipedia.org/wiki/Property_(programming)#JavaScript

"Một tài sản, trong một số ngôn ngữ lập trình hướng đối tượng, là một loại đặc biệt của thành viên lớp , trung gian giữa một trường (hoặc dữ liệu thành viên) và một phương thức .... Một số ngôn ngữ hướng đối tượng, chẳng hạn như Java, không hỗ trợ các thuộc tính và yêu cầu người lập trình xác định cặp truy cập và biến tần phương pháp thay thế. "

Trong đó tiêu chuẩn, định nghĩa phi javascript tài sản

C# có tính chất, và Java không có tính chất

Các vấn đề liên quan