2012-07-08 29 views
8

Tôi cần sửa lỗi trong hàm save của thư viện Parse.Object. Tuy nhiên, khi tôi cố gắng gọi hàm save gốc trong nguyên mẫu ghi đè của tôi, nó lặp lại một cách đệ quy cho đến khi tràn ngăn xếp!Mở rộng hàm nguyên mẫu mà không ghi đè lên nó

Parse.Object.prototype.save = function (arg1, arg2, arg3) { 
    fixIncludedParseObjects(this); 

    Parse.Object.prototype.save.call(this, arg1, arg2, arg3); // endless loop 
}; 

Làm cách nào để thay đổi đường vòng lặp vô tận để gọi hàm ban đầu được phân tích bằng cách phân tích cú pháp?

Cảm ơn!

+0

Tôi thích câu hỏi này, nhưng vẫn không thể tìm ra câu trả lời làm việc cho tôi , ngay cả với câu trả lời từ @xdazz. – Ryan

Trả lời

18

Hãy thử điều này:

(function(save) { 
    Parse.Object.prototype.save = function (arg1, arg2, arg3) { 
    fixIncludedParseObjects(this); 
    save.call(this, arg1, arg2, arg3); 
    }; 
}(Parse.Object.prototype.save)); 
+3

Bạn có thể giải thích những gì đang xảy ra ở đây không? Hoặc một số liên kết nào. Cảm ơn – Adi

+3

@Adnan Bạn cần lưu phương thức lưu cũ vào một biến, theo cách này, hãy sử dụng tham số chức năng 'save'. – xdazz

+0

Cảm ơn bạn @xdazz – Adi

4
Parse.Object.prototype.save = function (save) { 
    return function() { 
     fixIncludedParseObjects(this); 
     //Remember to return and .apply arguments when proxying 
     return save.apply(this, arguments); 
    }; 
}(Parse.Object.prototype.save); 
+1

Hoạt động, nhưng cung cấp lỗi JSHint" Gói một hàm ngay lập tức vào ơn gọi trong ngoặc đơn "https://jslinterrors.com/wrap-an-immediate-function-invocation-in-parentheses –

0

Tương tự như câu trả lời chấp nhận nhưng có lẽ một chút dễ dàng hơn để hiểu

var originalSaveFn = Parse.Object.prototype.save; 
Parse.Object.prototype.save = function(arg1, arg2, arg3) { 
    fixIncludedParseObjects(this); 
    originalSaveFn.call(this, arg1, arg2, arg3); 
}; 
Các vấn đề liên quan