2015-04-29 15 views
5

Đôi khi tôi muốn thêm vào hành vi để JS chuỗi nhưCó thể mở rộng đối tượng javascript sau đó 'xóa' các phần mở rộng sau khi sử dụng không?

String.prototype.camelize = function() { 
    return this.replace (/(?:^|[-])(\w)/g, function (, c) { 
     return c ? c.toUpperCase() : ''; 
    }); 
}; 

Tuy nhiên nó thường được đồng ý rằng thay đổi kiểu nguyên thủy là một ý tưởng khủng khiếp.

Tôi có thể theo dõi bất kỳ mẫu nào để gán tạm thời các chức năng cho một loại và xóa sau khi sử dụng không? Hoặc bất cứ điều gì tương tự như của ruby ​​'class < < obj' mà sửa đổi nguyên mẫu của một đối tượng duy nhất?

EDIT: Mục đích của việc này là để có thể sử dụng cú pháp như

name = s.camelize();

hoặc

nếu (s.hyphenize(). Length < 8);

Vì vậy, đừng bận tâm với phương pháp tiếp cận chức năng tĩnh.

Ngoài ra, câu hỏi này thực sự tập trung hơn vào cách thao tác với các đối tượng js để làm được nhiều hơn với ít tác dụng phụ hơn.

+5

có vấn đề gì với chức năng chính quy mà không sửa đổi gì? – Onheiron

+0

Tại sao bạn phải làm điều này nếu nó chỉ là tạm thời? Hoặc, tại sao không 'function camelize() {...}'? – Leo

Trả lời

3

Bạn có thể thực hiện chính xác những gì bạn mô tả- đối tượng JavaScript chỉ là một nhóm thuộc tính, một số trong số đó là các hàm. Vì vậy, nếu bạn có thể tạo:

String.prototype.camelize = function() { 
    return this.replace (/(?:^|[-])(\w)/g, function (, c) { 
     return c ? c.toUpperCase() : ''; 
    }); 
}; 

Sau đó, bạn đều có thể gọi:

String.prototype.camelize = null; 

Một khi bạn đã làm điều đó, khả năng của bạn để camelize chuỗi được loại trừ.

Bây giờ, tôi chắc chắn bạn có lý do chính đáng để muốn thực hiện mọi việc theo cách này, nhưng tôi không thể tưởng tượng được tình huống mà bạn đang đề xuất là điều đúng. Để làm điều gì đó như thế này theo cách thành ngữ hơn, bạn có thể tạo kiểu kết thúc chuỗi và cung cấp hàm camelize hoặc bạn chỉ có thể liên kết hàm đó với các phiên bản của lớp - thậm chí bạn có thể thả nó từ thư viện hàm tiện ích vào lớp của mình . Các chức năng ném xung quanh là một trong những sức mạnh tuyệt vời của JavaScript.

Hãy lưu ý rằng sự ác cảm của bạn đối với các chức năng tiện ích sẽ buộc bạn phải mất nhiều thời gian dài nếu bạn viết JavaScript. Bạn có thể cần phải đặt một số định kiến ​​của bạn ở một bên cho đến khi bạn phải nắm bắt các nền tảng của ngôn ngữ (những gì có thể có nghĩa là The Good Parts) và sau đó xem lại chúng khi bạn có một xử lý mạnh mẽ hơn. Nó không phải là bạn không thể viết mã đúng trong JavaScript, nhưng nó không giống như các ngôn ngữ khác mà bạn đã sử dụng và bạn phải phù hợp với thực hành và triết học của bạn với ngôn ngữ, thay vì cố gắng ép ngôn ngữ thành hình dạng của các định kiến ​​của bạn . Mọi người làm điều đó lúc đầu và JavaScript linh hoạt đến mức nó rất gần hoạt động, nhưng học cách sử dụng nó theo cách thành ngữ hơn gặt hái những phần thưởng lớn khi bạn tiếp tục.

+0

'String.prototype.camelize = null' để lại sự hiện diện của người ngoài hành tinh,' xóa' có thể tốt hơn. – Leonid

+0

Có 'String.prototype.camelize = null' thực sự loại bỏ camelize của bạn khỏi 'không gian tên', hoặc nó sẽ tạo ra vấn đề cho người khác muốn có phiên bản riêng của họ? Về nhận xét ngôn ngữ của bạn: kết luận của tôi từ 5 ngôn ngữ trở lên tôi đã sử dụng rộng rãi là yêu cầu 'lập trình thành ngữ' hầu như luôn đáp ứng với một lỗ hổng lớn trong ngôn ngữ (Verilog, đặc biệt, được thiết kế quá tệ đến mức bạn * phải * sử dụng các mẫu). JS dường như, về sự tiếp xúc hạn chế của tôi, giống nhau nhiều. – EML

+1

@EML Nó- bạn đang loại bỏ nó khỏi nguyên mẫu, vì vậy nó không còn tồn tại cho bất cứ điều gì trên chuỗi nguyên mẫu đó. Khi @Leonid quan sát, thiết lập nó thành 'null' có nghĩa là nó bây giờ có một giá trị' null' thay vì nó không tồn tại, không giống như JavaScript. Sai lầm bạn đang thực hiện về việc sử dụng ngôn ngữ thành ngữ là thành ngữ thường là những gì mang lại cho một ngôn ngữ đó là sự biểu cảm và quyền lực. Tránh chúng làm cho tất cả các ngôn ngữ đều kém bởi vì nó không cho phép bất kỳ ngôn ngữ nào chơi theo thế mạnh của chúng. – glenatron

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