Điều này có được coi là lỗi của Chrome hoặc sự khoan dung của Safari/Firefox không?Tên đóng cửa xung đột với chức năng cùng tên bên trong, nhưng chỉ trong Chrome
Khi tôi tạo chức năng đóng, tôi đặt tên tùy ý là "Nút". Trong thời gian đóng cửa, tôi có một hàm là một hàm tạo cho đối tượng chính mà việc đóng tạo ra, còn được gọi là "Nút".
Việc đóng trả về tham chiếu đến Nút, có lẽ là hàm bên trong Button().
var closure = (function Button(){
//the closure's primary object
function Button(target) {
//constructor for our button object
}
Button.prototype = e.inherit(e.Plugin.prototype);
Button.prototype.constructor = Button;
return {
Button: Button,
};
}());
//now let's call our closure to create a new Button
var newButton = new closure.Button()
Trong Safari và Firefox, đây không phải là vấn đề. Gọi đóng mới.Button() trả về một thể hiện của nút bên trong(). Tuy nhiên, trong Chrome, khi tên hàm bên trong khớp với tên hàm đóng, hàm khởi tạo xuất hiện KHÔNG được gọi. Những gì được trả lại có vẻ là chức năng đóng cửa chính nó. Điều này, tất nhiên, dẫn đến lỗi khi hàm bên trong định nghĩa các phương thức mà sau này tôi thử và gọi.
Tôi đăng câu hỏi này vì hai lý do:
1) Tôi đã mất hơn một ngày để tìm ra nguyên nhân của vấn đề, được Chrome báo cáo rằng nút của tôi không có phương pháp .Activate (trong mã thực sự của tôi, nút kế thừa từ một đối tượng cha mẹ cung cấp phương thức .activate()). Nếu có ai khác gặp phải vấn đề này thì họ có thể tìm thấy câu hỏi của tôi ở đây và tiết kiệm thời gian.
2) Tôi tự hỏi: nếu đây là lỗi của tôi, sử dụng cùng tên cho cả việc đóng và chức năng trong quá trình đóng, tại sao nó hoạt động trong Safari/Firefox? Cụ thể hơn, liệu Chrome có thực sự làm cho việc đóng cửa trở lại chính nó và không phải là chức năng bên trong dự định? Đây có phải là một lỗi?
Không repro trong Chrome: http://jsfiddle.net/77LZh/ –
Tôi đã nghe nói về các vấn đề với các biểu thức hàm được đặt tên trong IE (xem [tại đây] (http://kangax.github.com/nfe/)), nhưng không phải Chrome. Và trên thực tế, thử nghiệm của @ SeanKinsey dường như chỉ hoạt động tốt trong Chrome. Điều gì làm cho bạn nghĩ rằng các nhà xây dựng không được gọi là? – bfavaretto