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

时间:2014-01-24 13:21:36

标签: javascript

我已经使用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();

什么时候我真的需要使用原型或什么是使用原型的最佳案例?

此致

2 个答案:

答案 0 :(得分:3)

只有两个常见用例:

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);
});

这使您还可以覆盖原型上定义的函数并影响所有创建的实例。

答案 1 :(得分:2)

  

如果我需要一个对象的新方法,我就去编辑那个对象   添加该方法,在大多数情况下,我知道什么属性和方法   我在创建对象时需要的。

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

这样,您无需编辑对象即可添加新方法。因此,更少的代码重复和更高的内存效率。