Hãy chứng minh tuyên bố corckford của:
"Bằng cách làm tăng Function.prototype với một phương pháp phương pháp, chúng tôi không longerhave để gõ tên của thuộc tính prototype Đó chút xấu xa có thể bây giờ. được giấu đi."
Đây Crockford muốn nói rằng bạn có thể thao tác Function.prototype để đạt được nhiều chức năng khác nhau cho usage.It cá nhân của bạn là một chức năng bổ sung vào function.prototype để thêm phương pháp mới/tài sản cho bất kỳ chức năng .Functions trong javascript kế thừa hình thức Function.prototype.lets phá vỡ mã của bạn.
Function.prototype.method = function (tên, func) {
trong dòng này Function.prototype được thêm một phương pháp mới method.This nhận hai đối số. name
satands cho một tên phương pháp mới.Và func
là viết tắt của chức năng của nó.Tôi nghĩ rằng bạn đã quen thuộc với phương pháp và các thuộc tính là gì. Các hàm là đối tượng lớp đầu tiên trong javascript. Do đó chúng có thể được thêm các thuộc tính và phương thức mới trong suốt thời gian chạy.
this.prototype [name] = func;
Đây này đề cập đến các chức năng mà gọi nó. [name]
là tên phương pháp và func
được chức năng của phương pháp này cho biết thêm một phương pháp mới để chức năng thông qua sử dụng array notation. Sau đó, cuối cùng
trở lại đây;
với tuyên bố này chức năng thông qua được trả về với một phương pháp mới được thêm vào nó.
Ở đây tôi có một ví dụ thực tiễn cho bạn:
Function.prototype.method = function (name, func) {
this.prototype[name] = func;
return this;
};
function Myfunction(){ // a constructor function called Myfunction
this.name='robin'; // it has a name property
}
Myfunction.method('mymethod',function(){ console.log(' i am available')}); //adds a method named 'mymethod to Myfunction constructor
var newObj=new Myfunction(); // creates a new instance of Myfunction class
console.log(newObj.mymethod()); //calls mymethod() of newObj
Dưới đây là một myfunction
constructor.We có thể thêm các phương pháp di truyền để nguyên mẫu của constructor này usind Myfunction.prototype.mymethod=function(){ ..}
Nếu bạn sử dụng myfunction như a hàm tạo đây là cách bạn thêm phương thức vào nó.But Như bạn đã thêm một chức năng mới đến Chức năng.nguyên mẫu, bạn chỉ có thể gọi nó như
Myfunction.method('mymethod',function(){console.log('i am available'}); //it will add a method named mymethod to Myfunction's prototype
Tuyên bố này sẽ thêm một phương pháp mới được gọi là mymethod
-Myfunction()'s prototype
ngầm.
vì vậy bạn không phải viết Myfunction.prototype.mymethod=function(){ console.log('i am available');
.Instead bạn có thể viết Myfunction.method('mymethod',function(){ console.log('i am available'});
Vì vậy, nó chứng tỏ nó sẽ giảm từ bạn viết Myfunction.prototype
một lần nữa và một lần nữa mỗi khi bạn muốn thêm các phương pháp mới để Hàm tạo hàm của tôi.
Vì vậy, nó chứng minh số tuyên bố của crockford.
Chạm vào nguyên mẫu của thứ bạn không sở hữu là một ý tưởng khủng khiếp (bạn mở cửa cho tất cả các loại xung đột). Đây là một chút biếng nhác đáng kinh ngạc về sự lười biếng trên phần của Crockford. – ssube
Việc "cải thiện" được thực hiện ở đó không thực sự có tầm quan trọng thực tiễn nhiều; Tôi nghĩ đó là một ví dụ về giảng dạy. – Pointy
@ssube: Crockford "không thông báo"? meh. nếu đó là vấn đề, hãy chỉ cho chúng tôi thay vì nói cho chúng tôi ... – dandavis