2016-12-06 18 views
9

Tôi muốn tạo một lớp tĩnh bằng cách sử dụng Javascript/Node JS. Tôi đã sử dụng google nhưng tôi không thể tìm thấy bất kỳ ví dụ hữu ích nào.Cách tạo các hàm/đối tượng tĩnh trong javascript/nodejs (ES6)

Tôi muốn tạo ra trong Javascript ES6 một cái gì đó như thế này (C#):

public static MyStaticClass { 
    public static void someMethod() { 
     //do stuff here 
    } 
} 

Còn bây giờ, tôi có lớp học này, nhưng tôi nghĩ rằng mã này sẽ tạo ra một trường hợp mới mỗi thời điểm đó nó được gọi là từ "yêu cầu".

function MyStaticClass() { 
    let someMethod =() => { 
     //do some stuff 
    } 
} 
var myInstance = new MyStaticClass(); 
module.exports = factory; 
+0

Sau đó, bạn không cần một lớp. Bạn cần một đối tượng. – estus

Trả lời

16

Lưu ý rằng JS là prototype-based programming, thay vì class-based.

Thay vì tạo lớp nhiều lần để truy cập phương pháp của nó, bạn chỉ có thể tạo ra một phương pháp trong một đối tượng, như

var MyStaticClass = { 
    someMethod: function() { 
     console.log('Doing someMethod'); 
    } 
} 

MyStaticClass.someMethod(); // Doing someMethod 

Vì trong JS, tất cả mọi thứ là một đối tượng (trừ primitive types + undefined + null) . Giống như khi bạn tạo hàm someMethod ở trên, bạn thực sự đã tạo đối tượng hàm mới có thể truy cập được với someMethod bên trong đối tượng MyStaticClass. (Đó là lý do tại sao bạn có thể truy cập vào các thuộc tính của đối tượng someMethod như MyStaticClass.someMethod.prototype hoặc MyStaticClass.someMethod.name)

Tuy nhiên, nếu bạn tìm thấy nó thuận tiện hơn để sử dụng lớp. ES6 hiện hoạt động với static methods.

Ví dụ:

MyStaticClass.js

class MyStaticClass { 
    static someMethod() { 
     console.log('Doing someMethod'); 
    } 

    static anotherMethod() { 
     console.log('Doing anotherMethod'); 
    } 
} 

module.exports = MyStaticClass; 

Main.js

var MyStaticClass = require("./MyStaticClass"); 

MyStaticClass.someMethod(); // Doing someMethod 
MyStaticClass.anotherMethod(); // Doing anotherMethod 
+2

Điều quan trọng cần lưu ý là ngay cả trong các lớp ES6, dựa trên nguyên mẫu thừa kế vẫn còn có hiệu lực đầy đủ - các "lớp" mới là cú pháp tạo ra sự thừa kế dựa trên nguyên mẫu, sử dụng nhiều cú pháp quen thuộc của thừa kế cổ điển. Các đối tượng JavaScript không được tạo khuôn mẫu từ các lớp, chúng được tạo khuôn mẫu bằng cách nói "Tôi giống như đối tượng ở đằng kia ngoại trừ những khác biệt này". – PMV

3

Tôi sẽ sử dụng một đối tượng theo nghĩa đen:

const myObject = { 
    someMethod() { 
    // do stuff here 
    } 
} 

module.exports = myObject; 
+0

Không nên là 'someMethod: function() {} '? Chỉnh sửa: Tôi hiểu, cảm ơn –

+0

đó là định nghĩa phương pháp với ECMAScript6. Kiểm tra https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Method_definitions – mattias

+0

@ChrisG ES6 cung cấp cú pháp mới – naomik

3

Bạn có thể sử dụng từ khóa static để xác định một phương pháp cho một lớp

class MyStatisticsClass { 
 
    static someMethod() { 
 
    return "MyStatisticsClass static method" 
 
    } 
 
} 
 

 
console.log(MyStatisticsClass.someMethod());

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