Tôi đang đánh giá selfish và tôi tự hỏi làm thế nào tôi có thể khai báo các phương thức/trường riêng tư?Phương thức và trường riêng tư
Trả lời
Cách thông thường để thực hiện các chức năng riêng tư là sử dụng chức năng mà "các phương pháp" khác nhau của bạn đóng, ví dụ: nhặt Dog
tấm gương của họ, thay đổi này:
// The basic Dog example
var Dog = Base.extend({
bark: function() {
return 'Ruff! Ruff!'
}
});
Để
// Adding a private function
var Dog = Base.extend((function(){
function trulyPrivate() {
console.log(this.bark());
}
return {
bark: function() {
return 'Ruff! Ruff!'
},
logBark: function() {
trulyPrivate.call(this);
}
};
})());
Cách sử dụng:
new Dog().logBark(); // logs "Ruff! Ruff!" using the truly private function behind the scenes
Re tin lĩnh vực, theo cách thông thường là để xây dựng bất cứ điều gì mà cần thực sự tin các trường từ bên trong hàm xây dựng của bạn để chúng đóng các biến (riêng tư) trong cuộc gọi đến hàm tạo, a'la Crockford's pattern:
function Foo(arg) {
var trulyPrivateData = arg;
this.logIt = function() {
console.log(trulyPrivateData);
};
}
Cách sử dụng:
var f = new Foo(42);
f.logIt(); // logs 42 even though there's no way, externally, to get that value from `f`
... ích kỷ không đi với hàm xây dựng thực tế, nhưng initialize
chức năng sẽ phục vụ cùng một mục đích:
var Dog = Base.extend({
initialize: function(arg) {
var woof = arg || 'Ruff! Ruff!';
this.bark = function() {
return woof;
};
}
});
Bây giờ, bạn không thể đặt woof
(ngoại trừ thời gian xây dựng, bởi vì chúng tôi đã cố tình làm điều đó), bạn chỉ có thể truy xuất nó từ bark
. Ví dụ: nó thực sự riêng tư (khác với chúng tôi đã cho phép rõ ràng bark
để trả lại).
Nếu bạn nhận được vào các chi tiết kỹ thuật này, các bài viết từ blog của tôi có thể (hoặc không thể) có ích, kể từ khi bạn nhận được vào các chức năng riêng và như vậy, bạn thường phải bắt đầu quản lý this
:
- Mythical Methods
- You must remember
this
- Private Methods in JavaScript (nghiêm túc cần một bản cập nhật/viết lại)
Và nếu bạn muốn một thứ khác để đánh giá, có Lineage
project của tôi, tương tự như thuần chủng nguyên mẫu, nhưng dễ dàng truy cập vào các thuộc tính đối tượng cha mẹ, các hàm, vv và cú pháp tích cực khuyến khích phạm vi riêng cho loại điều này.
Điều đó cung cấp cho bạn các thuộc tính riêng ở cấp lớp; Tôi không chắc rằng bạn có thể có các thuộc tính riêng cho từng cá thể mà không có một số sửa đổi đối với khung công tác đó. Tuy nhiên tôi chưa có nhiều cà phê sáng nay. – Pointy
@Pointy: Không có sự khác biệt giữa phương pháp "cấp" và "lớp" cấp "trong JavaScript ngoại trừ cách bạn gọi chúng. Cách tôi gọi là 'truePrivate', nó là một ví dụ cụ thể. Nếu tôi gọi nó mà không có '.call' và vừa mới chuyển sang ví dụ' Dog' như một đối số, nó sẽ là "lớp" đặc biệt. Bạn không thể thực hiện các hàm riêng tư thực sự mà bạn gọi thông qua ký hiệu 'this.xyz()' trực tiếp trong JavaScript (bất kể khung công tác), bởi vì tất cả các thuộc tính trên cá thể là công khai.Thêm (khá ngày): http://blog.niftysnippets.org/2009/09/private-methods-in-javascript.html –
Đúng bên phải; Tôi đã không thấy rằng có một "khởi tạo" cũng không thực sự tìm hiểu nhiều về khuôn khổ đó trong 15 giây tôi đã dành trên github "readme" :-) Nó chỉ làm cho các đối tượng, do đó, thêm một tài sản từ một đóng cửa không phải là bất kỳ khác với khuôn khổ hơn là không có nó. – Pointy
- 1. RSpec: Phương thức riêng tư sơ khai
- 2. Phương thức nhập của Ruby có luôn riêng tư không?
- 3. Làm cho các phương thức được ủy quyền riêng tư
- 4. Đặt các phương thức riêng tư cuối cùng?
- 5. Phương thức riêng tư của Ruby on Rails?
- 6. Thực hành tốt nhất của Junit: Phương thức công khai gọi nhiều phương thức riêng tư
- 7. Tại sao Resharper lại muốn trường hợp lạc đà cũng là phương thức riêng tư?
- 8. Truy cập các phương thức "Công khai" từ các phương thức "Riêng tư" trong lớp javascript
- 9. Khối so với phương pháp riêng tư?
- 10. Truy cập các trường riêng tư
- 11. Tại sao bạn khai báo phương thức getters và setters riêng tư?
- 12. Giao thức tuân thủ riêng tư
- 13. Riêng tư triển khai giao thức?
- 14. Giao thức "riêng tư" mục tiêu-C?
- 15. Gọi phương thức lớp riêng từ phương thức cá nhân
- 16. Có thể có phương pháp mở rộng riêng tư không?
- 17. Lớp thành viên tĩnh - khai báo lớp riêng tư và lớp thành viên riêng tư?
- 18. Truy cập các phương thức riêng tư từ các chức năng mô-đun trong Ruby
- 19. API của Apple và riêng tư
- 20. Tại sao PHP cho phép gọi các phương thức riêng tư từ các phiên bản khác?
- 21. Tại sao tôi không thể gọi phương thức riêng tư khi tôi ở trong một phương thức công khai?
- 22. Sự khác biệt giữa EventHandler riêng tư và sự kiện riêng tư EventHandler?
- 23. Java - Có ok để có phương thức chuyển các giá trị trường riêng vào phương thức của lớp khác không?
- 24. Làm cách nào để giả lập một trường riêng tư?
- 25. JAVADOC cho các phương thức riêng (BlueJ)
- 26. Chuyển hướng Laravel từ phương thức riêng
- 27. C++ Riêng tư có thực sự riêng tư không?
- 28. Sự khác biệt giữa OpenMP luồng riêng tư và riêng tư
- 29. Cách kiểm tra các trường riêng được sửa đổi thông qua các phương thức công cộng
- 30. Đảm bảo đầu vào của các phương thức riêng tư/được bảo vệ?
Nhìn vào các ví dụ tôi muốn nói đó là một câu hỏi khá hay :)) – mihai
Tôi nghĩ ra cách giải quyết này liên quan đến các biến riêng tư + đóng cửa, bạn nghĩ sao? http://marcelorjava.wordpress.com/2014/06/07/object-oriented-programming-with-java-and-javascript/ – theMarceloR