我对JavaScript还是很陌生,有一点我无法理解:
使用Object
创建class
:
class RabbitClass {
constructor(type) {
this.type = type;
}
speak(line) {
console.log(`The ${this.type} rabbit says '${line}'`);
}
}
let killerRabbit = new RabbitClass("killer");
通过将Object
与new
一起使用来创建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
。