Javascript原型继承

时间:2018-08-17 07:55:52

标签: javascript inheritance prototypal-inheritance

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继承,但是对于上述两种方法,结果都是相同的。因此,我在这里感到困惑,该采取哪种方法?为什么?

1 个答案:

答案 0 :(得分:3)

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

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

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