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( '没事做' ),这样就会出错

结论:

上一篇下一篇

猜你喜欢

热点阅读