2014-01-24 38 views
4

我一直在使用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(); 

我当确实需要使用的原型或者什么是使用原型最好的情况下?

问候,

+0

这可能是JavaScript中一些OOP设计模式的一个很好的概述:[学习JavaScript设计模式](http://addyosmani.com/resources/essentialjsdesignpatterns/book/#designpatternsjavascript) –

回答

2

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

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

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

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

这使您也可以覆盖在原型上定义的功能并影响所有创建的实例。

相关问题