Tôi đã chơi xung quanh với điều này trong 3 giờ qua và cuối cùng đã nhận nó ít nhất một chút thanh lịch sử dụng chức năng mới như gợi ý trên các chủ đề khác:
/**
* JavaScript Rename Function
* @author Nate Ferrero
* @license Public Domain
* @date Apr 5th, 2014
*/
var renameFunction = function (name, fn) {
return (new Function("return function (call) { return function " + name +
"() { return call(this, arguments) }; };")())(Function.apply.bind(fn));
};
/**
* Test Code
*/
var cls = renameFunction('Book', function (title) {
this.title = title;
});
new cls('One Flew to Kill a Mockingbird');
Nếu bạn chạy mã trên, bạn sẽ thấy kết quả sau đây cho bảng điều khiển của mình:
Book {title: "One Flew to Kill a Mockingbird"}
Nguồn
2014-04-05 11:41:00
Bạn có thể giải thích vấn đề bạn đang cố giải quyết không? – Philipp
@Philipp: Ví dụ, OP có thể quan tâm đến việc thay thế một số hàm tạo bằng một hàm tạo khác, nhưng đặt tên giống với hàm tạo ban đầu, vì vậy mã sẽ thấy cùng tên hàm. Đó có thể là một trong những lý do tôi phải đối mặt. Nhưng tôi chắc chắn có những người khác. –