我正在学习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都给了我相同的结果。那么有什么区别,为什么要使用原型?
答案 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.