2013-01-18 24 views
5

Tôi mới dùng đối tượng JavaScript. Tôi muốn tạo một đối tượng như đối tượng Math JavaScript. Nhưng nó không hoạt động (nó không trả về gì cả).JavaScript Object - Gọi mà không cần tạo nó (như đối tượng Math)

Tôi muốn tạo một đối tượng được gọi là Khu vực và cung cấp cho nó phương thức hình vuông và hình chữ nhật. Tôi muốn sử dụng nó giống như cách đối tượng Math được sử dụng. Để tìm diện tích của một hình vuông, tôi sẽ làm:

var squareArea = Area.square(10); // 100 

Tôi đã chọn các khu vực cho ví dụ này vì nó đơn giản.

kịch bản của tôi là như sau:

<script> 
window.onload = function() { 


    function Area() { 

     function square(a) { 
      area = a * a; 
      return area; 
     } 

     function rectangle(a, b) { 
      area = a * b; 
      return area;  
     } 

    } 

    rectangleArea = Area.rectangle(10, 20); 

    alert(rectangleArea); 

} 
</script> 
+1

Tìm hiểu thêm về các đối tượng: https://developer.mozilla.org/en-US/docs/JavaScript/Guide/Working_with_Objects. –

Trả lời

6

Những gì bạn muốn làm ở đây là tạo một đối tượng có tên Area với các phương pháp bạn mô tả được gán cho nó. Cách đơn giản nhất và sạch nhất để làm điều này sẽ như thế nào vậy:

var Area = { 

    square: function(a) 
    { 
     return a * a; 
    }, 

    rectangle: function(a, b) 
    { 
     return a * b; 
    } 

}; 

Bây giờ bạn có thể sử dụng Area.square()Area.rectangle() như bạn mô tả.

7

này sẽ tạo ra một đối tượng gọi Area với các phương pháp trên đó.

var Area = { 
    staticMethod: function() { } 
}; 

Trừ khi bạn muốn Area gọi được, đừng biến nó thành hàm.

3

Chức năng của bạn chỉ nằm trong phạm vi bên trong hàm chứa, Area. Để làm cho họ truy cập thông qua các đối tượng Area thiết lập các chức năng như tính chất của Area:

var Area = { 
    square: function(a) { 
     area = a * a; 
     return area; 
    }, 
    rectangle: function(a, b) { 
     area = a * b; 
     return area;  
    } 
} 

rectangleArea = Area.rectangle(10, 20); 
alert(rectangleArea); 

Có vẻ như bạn đang cố gắng sử dụng "lớp học" từ khi bạn thực Area một hàm. Bạn không cần phải làm điều đó bởi vì bạn không cần phải nhiều trường hợp của Area, nhưng nếu bạn muốn nó làm điều này:

function AreaClass(){ 
    // just an empty constructor 
} 
AreaClass.prototype.square = function(a) { 
    area = a * a; 
    return area; 
} 
AreaClass.prototype.rectangle = function(a, b) { 
    area = a * b; 
    return area;  
} 
var Area = new AreaClass(); 
2

Ok, vì vậy có rất nhiều câu trả lời với mã, nhưng ít lời giải thích:

Bằng cách thực hiện Area một hàm, bạn mắc lỗi đầu tiên - nó phải là một đối tượng có các hàm được đính kèm.

Sau đó, trong phần chức năng Area bạn khai báo nhiều chức năng hơn, nhưng vì chúng nằm trong hàm Area, chúng chỉ bị xóa ngay - không thực sự có thể gọi ở bên ngoài.

Những gì bạn muốn là làm cho một đối tượng:

var Area = {}; 

Sau đó đính kèm các chức năng với nó:

Area.square = function(var a) { 
    area = a * a; 
    return area; 
}; 

Và vân vân.

Bằng cách đó, các hàm bạn muốn gọi là các thuộc tính của đối tượng Area.

Hoặc bạn có thể làm điều đó inline:

var Area = { 
    square: function(var a) { 
     area = a * a; 
     return area; 
    } 
} 
0

Là một thay thế chỉ đơn giản là tạo ra một không gian tên cho các phương pháp của bạn (ví dụ, var Area = { ... }), bạn có thể thêm các phương pháp tĩnh đến các lớp học hiện có, ví dụ

function Area() { ... }; 

Area.square = function(a) { 
    return a * a; 
}; 
Các vấn đề liên quan