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 不需要多个不同的功能,也节省了每次需要时都不需要构建它们的速度。
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 不需要多个不同的功能,也节省了每次需要时都不需要构建它们的速度。