Trong JavaScript, điều tương tự bạn có thể thực hiện theo nhiều cách khác nhau.Nguyên mẫu trong JavaScript
Hãy xem xét các ví dụ:
1:
function Circle(radius) {
return {
"r" : radius,
"area" : function(){
return Circle.pi * this.r * this.r;
}
}
}
Circle.pi = 3.14159;
var a = Circle(10);
alert(a.area());
2:
function Circle(radius) {
this.r = radius;
}
Circle.pi = 3.14159;
Circle.prototype.area = function(){
return Circle.pi * this.r * this.r;
}
var a = new Circle(10);
alert(a.area());
Thứ hai là tốt hơn so với lần đầu tiên bởi vì chúng tôi không xác định chức năng tương tự khu vực cho bất kỳ trường hợp số Vòng kết nối.
Nhưng cho phép xem xét 3:
function Circle(radius) {
return {
"r" : radius,
"area" : Circle.area
}
}
Circle.pi = 3.14159;
Circle.area = function(){
return Circle.pi * this.r * this.r;
}
var a = Circle(10);
alert(a.area());
Có lý do nào để thích phong cách thứ hai thay vì thứ ba? Hay tôi hiểu lầm gì đó?
Bạn biết về tính khả dụng của ['Math.PI'] (https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Math/PI), phải không? –
có thể trùng lặp của [Object hướng javascript với nguyên mẫu vs đóng cửa] (http://stackoverflow.com/questions/3564238/object-oriented-javascript-with-prototypes-vs-closures) –
Tôi đã thực hiện một số tiêu chuẩn như ở đây http : //blogs.msdn.com/b/kristoffer/archive/2007/02/13/javascript-prototype-versus-closure-execution-speed.aspx. Kết quả - phong cách thứ 3 chỉ giữa 1 và 2 :) Thx cho tất cả các câu trả lời và nhận xét, tôi đã học được rất nhiều. – Dan