Javascript 原型继承

Javascript prototypal Inheritence

var Person = function(name){
    this.name = name;

    this.sayName = function () {
        console.log("My Name is "+ this.name);
    }
}

var nitin = new Person("Nitin");

nitin.sayName(); // My Name is Nitin


// Codebreak

var Person = function(name){
    this.name = name;
}

Person.prototype.sayName = function (){
  console.log("My Name is "+ this.name);
}

var nitin = new Person("Nitin");

nitin.sayName(); // My Name is Nitin

我正在 JS 中进行继承,但对于上述两种方法,结果是相同的。所以我很困惑应该遵循哪种方法以及为什么?

前者有一个空原型,只包含构造函数。后者有一个带有行为 (sayName) 的原型。

不可能从第一个示例继承行为,因为它没有原型,而在第二个示例中,原型可以被传递并因此被继承。

此外,从内存管理/代码执行的角度来看,原型更高效。 V8(Google 的 JavaScript 解释器)和大多数其他 JS 解释器在解释原型时会从原型构建可重用的代码。这既节省了 space 不需要多个不同的功能,也节省了每次需要时都不需要构建它们的速度。