js中类定义函数时用prototype与不用的区别
2019-12-24 本文已影响0人
开车去环游世界
举个例子:
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
有什么区别呢?下面我们来测试这个实例:
let t1 = new FFFFuck( '摸鱼' );
// t1.do11(); //调用出错
FFFFuck.do11( '睡觉' );
let t2 = new FFFFuck( '吃饭' );
t2.do22( '打豆豆' );
// FFFFuck.do2( '没事做' ); //调用出错
经过测试发现,没有使用 prototype
的方法相当于类的静态方法,因此可以这样调用,FFFFuck.do11( '睡觉' )
;但如果 new
后才能使用调用就会出错,t1.do11()
。
相反,使用 prototype
的方法相当于类的实例方法,需要 new
后才能使用;但如果直接调用,FFFFuck.do2( '没事做' )
,这样就会出错
结论:
- 使用
prototype
定义的方法相当于类的实例方法,必须new
后才能使用 - 不使用
prototype
定义的方法相当于类的静态方法,可以直接使用,不需要new