通过调用Class构造函数创建的Object的JavaScript原型

时间:2018-07-09 17:34:15

标签: javascript javascript-objects

我对JavaScript还是很陌生,有一点我无法理解:

  1. 使用Object创建class

    class RabbitClass {
      constructor(type) {
        this.type = type;
      }
      speak(line) {
        console.log(`The ${this.type} rabbit says '${line}'`);
      }
    }
    
    let killerRabbit = new RabbitClass("killer");
    
  2. 通过将Objectnew一起使用来创建function

    function RabbitFunction(type) {
      this.type = type;
    }
    
    Rabbit.prototype.speak = function(line) {
      console.log(`The ${this.type} rabbit says '${line}'`);
    };
    
    let weirdRabbit = new RabbitFunction("weird");
    

问题: weirdRabbit是从方法二中的RabbitFunction创建的,其输出如下:

console.log(Object.getPrototypeOf(weirdRabbit));
  

RabbitFunction {说:function(line){…}}

killerRabbit是使用Method1中的RabbitClass创建的,其输出如下:

console.log(Object.getPrototypeOf(killerRabbit));
  

{}


为什么两个输出之间有区别?

RabbitClass也是function,就像方法2中的RabbitFunction一样。

这两件事本质上是不一样的吗?

functions都创建objects与自己的prototypes属性相同的.prototype

0 个答案:

没有答案