为什么我需要使用Javascript对象原型

为什么我需要使用Javascript对象原型,javascript,Javascript,我使用JavaScript已经有一段时间了,我经常使用对象,但我总是想知道什么时候我需要使用原型!!如果我需要一个对象的新方法,我只需编辑该对象并添加该方法,在大多数情况下,我知道创建该对象时需要哪些属性和方法 我在原型中播种有益的东西,我可以使一个对象继承另一个对象: var Person = function(firstname,lastname) { this.first_name = firstname; this.last_name = last

我使用JavaScript已经有一段时间了,我经常使用对象,但我总是想知道什么时候我需要使用原型!!如果我需要一个对象的新方法,我只需编辑该对象并添加该方法,在大多数情况下,我知道创建该对象时需要哪些属性和方法

我在原型中播种有益的东西,我可以使一个对象继承另一个对象:

    var Person = function(firstname,lastname) {
        this.first_name = firstname;
        this.last_name = lastname;
    };

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

   employee.prototype = new Person();
什么时候我真的需要使用原型,或者使用原型的最佳情况是什么

问候,

如果我需要一个对象的新方法,我只需编辑该对象并 添加该方法,在大多数情况下,我知道哪些属性和方法 我在创建对象时需要的

使用原型的一个好处是它允许方法共享。如果对象
A
B
具有相同的原型,则向其原型添加函数
C
将允许
A
B
访问该函数


这样,您就不需要编辑两个对象来添加新方法。因此,代码重复更少,内存效率更高

只有两种常见的用例:

1)更快的实例创建速度

如果要使用构造函数创建对象,可以直接在此构造函数中添加方法:

var Person = function(firstname,lastname) {
     this.first_name = firstname;
     this.last_name = lastname;
     this.sayName = function () {
         alert("Hi, my name is " + this.first_name + " " + this.last_name);
     };
};
但是,这有一个缺点,即将为每个实例创建函数,这需要额外的时间。将方法添加到原型将加快实例的创建,因为函数只需定义一次:

var Person = function(firstname,lastname) {
     this.first_name = firstname;
     this.last_name = lastname;
};

Person.prototype.sayName = function () {
    alert("Hi, my name is " + this.first_name + " " + this.last_name);
};
2)扩展对象

使用
prototype
扩展内置(或自定义)对象。例如:

Array.prototype.forEach = function (callback) {
    for (var i = 0; i < this.length; i++) {
        callback(this[i], i);
    }
};

var arr = [1,2,3,4];
arr.forEach(function(item, index) {
    console.log(item);
});
Array.prototype.forEach=函数(回调){
for(var i=0;i

这也使您能够覆盖在原型上定义的函数,并影响所有创建的实例。

这可能是JavaScript中一些OOP设计模式的一个很好的概述: