舉個例子:
function FFFFuck( name ) {
this.name = name;
}
// 不加prototype的情況
FFFFuck.do11 = function( msg ) {
console.log( `do11: ${msg}` );
};
// 添加prototype的情況
FFFFuck.prototype.do22 = function( msg ) {
console.log( `do22: ${msg}` );
};
上面代碼添加與不添加 prototype
有什么區(qū)別呢?下面我們來測試這個實例:
let t1 = new FFFFuck( '摸魚' );
// t1.do11(); //調(diào)用出錯
FFFFuck.do11( '睡覺' );
let t2 = new FFFFuck( '吃飯' );
t2.do22( '打豆豆' );
// FFFFuck.do2( '沒事做' ); //調(diào)用出錯
經(jīng)過測試發(fā)現(xiàn)肢执,沒有使用 prototype
的方法相當(dāng)于類的靜態(tài)方法,因此可以這樣調(diào)用,FFFFuck.do11( '睡覺' )
;但如果 new
后才能使用調(diào)用就會出錯米丘,t1.do11()
。
相反糊啡,使用 prototype
的方法相當(dāng)于類的實例方法拄查,需要 new
后才能使用;但如果直接調(diào)用棚蓄,FFFFuck.do2( '沒事做' )
堕扶,這樣就會出錯
結(jié)論:
- 使用
prototype
定義的方法相當(dāng)于類的實例方法,必須new
后才能使用 - 不使用
prototype
定義的方法相當(dāng)于類的靜態(tài)方法梭依,可以直接使用稍算,不需要new