为什么要使用Javascript原型继承?

时间:2017-08-01 09:53:27

标签: javascript inheritance prototype

我正在学习Javascript和原型继承,并没有真正了解它。

示例:

Given user launches the application
When user login with valid credentials
and navigate to required page
When String str is "XYZ"
Then verify title
And verify text field 1
And verify test field 2
And verify select box

greet和greet1都给了我相同的结果。那么有什么区别,为什么要使用原型?

4 个答案:

答案 0 :(得分:0)

对于第一个版本,每次您创建类的新实例时,它都会为greet1方法创建一个实例属性。

使用原型方法,它只在原型上创建一次属性greet

如果你有1000个Person实例,你将在内存中有1000个名为greet1的属性。方法2我只会是1。

有关更详细的说明,请查看此question的答案。

答案 1 :(得分:0)

在第一个示例中,您为Person的每个实例创建greet函数的实例,而在使用原型时,每个Person实例共享的函数只有一个副本。它对更大的应用程序(内存方式)更有效。

答案 2 :(得分:0)

因为您可以在不触及基础对象的情况下自由扩展原型。

这意味着你可以这样做:

Array.prototype.sum = function() {return this.reduce((a,b)=>a+b)};

然后使用类似的东西:

[1,2,3,4].sum()

这有用吗?

有时您会期望所有浏览器都有某种行为。如果它不可用,你可以用所谓的polyfill填充基础对象。

对你自己的物品有什么用?

原型中的函数不会被复制,而是链接到您的对象。这减少了内存使用量并提高了执行速度和初始化速度。

保持简单的愚蠢,你很高兴。

答案 3 :(得分:0)

创建原型背后的想法是避免任何重复。使用原型可以更快地创建对象,因为每次创建新对象时都不必重新创建该函数。

考虑以下示例:

function Person(firstname) {
this.firstname = firstname;
this.greet1 = function() {
console.log('Hi ' + this.firstname + ' by greet1');
};
};
Person.prototype.greet = function() {
console.log('Hi ' + this.firstname + ' by greet');
};
var john = new Person('John');
var sam = new Person('Sam'); //a new instance created here

john.greet1(); //Hi John by greet1
sam.greet1(); //Hi Sam by greet1

console.log(john);//Person{firstname: "John", greet1: function (){…}}
console.log(sam);//Person{firstname: "Sam", greet1: function (){…}}
//greet1 is duplicated in both the instances, we can use prototypes and
//avoid this behaviour.

john.greet(); //Hi John by greet
sam.greet();  //Hi Sam by greet

//Hence with prototypes the same result can be obtained without any
//duplications.