2014-01-24 39 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); 
}); 

這使您也可以覆蓋在原型上定義的功能並影響所有創建的實例。

相關問題