我看到的絕大多數(shù)javascript代碼都使用原型方法。我認為有三個原因,我可以想到我的頭頂。
第一,避免讓每個類都成為一個巨大的構(gòu)造函數(shù):構(gòu)造函數(shù)邏輯在構(gòu)造函數(shù)中,其他方法的邏輯在其他地方聲明-這主要是一個清晰的東西/關(guān)注點的分離,但是在javascript中,你需要盡可能的清晰。
二是效率。在構(gòu)造函數(shù)中聲明方法時,您將為對象的每個實例創(chuàng)建一個函數(shù)對象的新實例,并將構(gòu)造函數(shù)的作用域綁定到這些函數(shù)中的每一個(也就是說,它們可以將參數(shù)引用到構(gòu)造函數(shù),只要該對象存在,構(gòu)造函數(shù)就永遠不可能被GC_d_當您在原型上聲明方法時,所有實例都使用函數(shù)對象的一個副本-Prototype屬性不會復制到實例中。
第三個原因是,當您使用Prototype方法時,可以各種方式“擴展”一個類,例如Backbone.js和CoffeeScript的類構(gòu)造所使用的原型鏈接。