2013-07-18 17 views
8

Tôi đang sử dụng mẫu mô-đun trong javascript. Đây có phải là cách để tạo các phiên bản của một "lớp học" không? Tôi đang sử dụng nó đúng cách?Truyền tham số đến một mô-đun javascript

var moduleClass = (function() { 
var a =5; 
return { 
getA: function() { 
    console.log(a); 
} 
}; 
})(); 
var instance = moduleClass; 
instance.getA(); 

http://jsfiddle.net/PzLKy/ Làm cách nào để chuyển thông số trên phiên bản mới?

+0

sử dụng hàm tạo hàm thay vì chữ nếu bạn muốn chuyển thông số tại thời điểm khởi tạo. – dandavis

+0

Không có cấu trúc giống lớp nào có liên quan đến mã của bạn. Bạn chỉ có một singleton được tạo ra với mô hình mô-đun. Bạn muốn gì * - chỉ sau đó chúng tôi có thể cho bạn biết mã là chính xác? – Bergi

+0

Tôi muốn có thể khai báo các phiên bản mới và chuyển các giá trị khác nhau. Tôi không muốn làm một cái gì đó cụ thể Tôi chỉ học tập. – Petran

Trả lời

-1

Để tạo phiên bản, bạn phải sử dụng từ khóa new với bất kỳ chức năng nào. Chức năng này aka Constructor có thể giúp bạn tạo ra nhiều trường hợp

var moduleClass = (function() { 
var a =5; 
return { 
getA: function() { 
    console.log(a); 
} 
}; 
})(); 
var instance = new moduleClass; 
instance.getA(); 

vị thi công: chức năng Constructor được sử dụng với các từ khóa mới, và họ là một trong những cách để bạn đưa ra một đối tượng một nguyên mẫu.

REFER ->

  1. Javascript Prototypes,objects,constructor??i am confused
  2. Constructors in JavaScript objects
+0

Bạn tự nói rằng 'mới' phải được sử dụng với hàm ** **… – Bergi

+0

bạn đã thử mã của mình trước khi đăng? – dandavis

+0

ohh, tôi hoàn toàn bỏ lỡ fiddle .. đi qua nó ngay bây giờ !!! –

7

Bạn không thực sự cần mới đây, Dưới đây là đúng cách để mã hóa để đạt được những gì bạn đang cố gắng để đạt được. Ngoài ra, be really careful while using new, if used unwisely it can start clobbering your Global variable, Nếu bạn muốn sử dụng mới, John Resig có một Giải thích thực sự tốt đẹp cho làm thế nào để làm điều đó một cách đúng đắn, cho đọc thêm bài viết này bởi John Resig http://ejohn.org/blog/simple-class-instantiation/

http://jsfiddle.net/PzLKy/2/

var moduleClass = (function() { 
    var a =5; 

    return { 
     setA: function (inA) { 
     a=inA; 
    } , 
    getA: function() { 
     alert(a); 
    } 

    }; 

})(); 


var instance = moduleClass; 
instance.setA(8); 
instance.getA(); 

Chỉnh sửa: contactmatt là đúng, chắc chắn không sợ sử dụng hàm tạo, nhưng đây là một số điều bạn cần phải biết về

Lấy từ bài viết của John Resig được đề cập trong đoạn đầu tiên,

giả sử đây là mã của bạn

function User(first, last){ 
    this.name = first + " " + last; 
} 

var user = new User("John", "Resig"); 
user.name // John Resig 
var user2 = User ("first","last"); 
user2.name //undefined, also this would pollute your current scope 

nếu bạn gọi các nhà xây dựng, bạn sẽ không nhận được bất kỳ loại dấu hiệu và có thể là một cơn ác mộng gỡ lỗi.

một cách để giải quyết này là

function User(first, last){ 
    if (this instanceof User) { 
    this.name = first + " " + last; 
    } else 
    return new User(first, last); 
} 

Để kết luận,

Vì vậy, nếu bạn cảm thấy constructor đó là cách tốt nhất cho vấn đề của bạn, sử dụng nó. Nhưng lưu ý, cũng là sự khởi tạo lớp đơn giản của John là một mô hình thực sự hữu ích, cố gắng trải qua nó, anh ta cũng giải thích hàm tạo chung.

0

Sử dụng hàm tạo hàm. Đừng sợ "mới", chỉ cần sử dụng nó một cách khôn ngoan.

Lưu ý: Quy ước đặt tên chuẩn là đặt tên cho các hàm sẽ được sử dụng làm hàm tạo hàm với một chữ hoa. (I E.ModuleClass thay vì moduleClass)

function ModuleClass() { 
    var a =5; 
    return { 
    getA: function() { 
    console.log(a); 
    } 
    }; 
}; 

hoặc nếu bạn đủ dũng cảm để tìm hiểu về các từ khoá 'này' trong JavaScript.

function ModuleClass() { 
    var a =5; 
    this.getA = function() { 
    console.log(a); 
    }; 
}; 

var instance = new moduleClass(); 
instance.getA();