美文网首页
js中类定义函数时用prototype与不用的区别

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

作者: 开车去环游世界 | 来源:发表于2019-12-24 15:16 被阅读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

相关文章

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

    举个例子: 上面代码添加与不添加 prototype 有什么区别呢?下面我们来测试这个实例: 经过测试发现,没有使...

  • 原型与原型链

    prototype(原型) 我们通过函数定义了类Person,类(函数)自动获得属性prototype 每个类的实...

  • 原型继承和回调函数

    prototype与自定义类 任何一个函数都有prototype属性。访问自带的构造函数Array的原型Array...

  • Javascript类函数中prototype与this的区别

    在Javascript面向对象编程中,定义实例方法主要有两种: 通过this变量定义 通过prototype定义 ...

  • C++基础构造函数(constructor)

    构造函数定义 C++中的类可以定义与类名相同的特殊成员函数,这种与类名相同的成员函数叫做构造函数,构造函数在定义时...

  • 实现构造函数及实例扩展

    prototype原型机制,在JS中,可以帮助实现对构造函数,以及实例继承和扩展。 定义对象后,定义构造函数,并设...

  • Vue源码中的亮点

    vue中有些地方用普通函数定义类比如Vue然后再用 prototype去添加实例方法,有些地方用class定义类。...

  • 析构函数

    value类与handle类析构函数的区别 value类 value类没有析构函数,自己定义的delete函数不会...

  • JS——原型与原型链

    一、prototype JS中每个函数都有一个prototype属性,该属性指向函数的原型对象 解析:(1)函数的...

  • class中的get set

    ES6中的class 类的数据类型就是函数 类本身就是指向构造函数 类的所有方法都定义在prototype属性上面...

网友评论

      本文标题:js中类定义函数时用prototype与不用的区别

      本文链接:https://www.haomeiwen.com/subject/sscfoctx.html