js中类定义函数时用prototype与不用的区别

举个例子:

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
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容