[英]JavaScript Prototype explanation needed
我通常在項目中以這種方式創建類...對象文字。
var objectName = {
//global variables
a : 'somevalue',
func1: function(){
},
func2: function(){
}
}
如果必須將其轉換為原型格式,該怎么辦?
當使用這種格式完成工作時,使用原型比使用原型有什么優勢?
人們為什么對原型這么講。
變成原型看起來像:
var someObject = function() {
this.a = "somevalue";
};
someObject.prototype.func1 = function() { // work };
someObject.prototype.func2 = function() { // work };
var myObject = new someObject();
有哪些優勢? 好了,有很多,但是當原型比對象字面量更具意義時,有一些實際的實際原因。
首先是減少重復代碼; 因此,可以說你想另一個對象非常smiliar到objectName
,但是你想a
是一個不同的值。 您可能最終會得到以下結果:
var objectName = {
a : 'somevalue',
func1: function(){ },
func2: function(){ }
}
var otherObjectName = {
a : 'otherValue',
func1: function(){ },
func2: function(){ }
}
你可以通過說減少重復的功能
var objectName = {
a : 'somevalue',
func1: function(){ },
func2: function(){ }
}
var otherObjectName = {
a : 'otherValue',
func1: objectName.func1,
func2: objectName.func2
}
或者,使用的原型,我可以做,所以我可以在我想要的值傳遞a
在對象的構造過程。 重構后的代碼如下所示:
var someObject = function(a) {
this.a = a;
};
someObject.prototype.func1 = function() { /* work */ };
someObject.prototype.func2 = function() { /* work */ };
var myObject = new someObject("somevalue");
var myOtherObject = new someObject("otherValue");
現在,如果我想為它們兩個添加新功能。 使用對象字面量方法,則必須記住還要將其添加到otherObjectName。 隨着文字數量的增加,管理所有這些文字將花費更長的時間和更多的難度。
使用原型方法,我們只需要說:
someObject.prototype.func3 = function() { // do even more work }
甚至更有趣的是,我可以通過只說一個引用來動態擴展兩個對象。
// find what function made me, get its prototype, and add a new function to it
myObject.constructor.prototype.func3 = function() { /* work */ }
myOtherObject.func3() // tada magic!
或者我可以僅通過了解引用來制作新對象。 喜歡:
var newObject = myObject.constructor(myObject.a + " new");
因為myObject
和myOtherObject
共享相同的constructor
和prototype
,所以使用該關系可以執行很多有趣的事情,而對於對象常量則無法做到。
您可以將原型想像成創建對象的小工廠,而不必自己像文字一樣創建每個對象。
現在,如果您在想,“好吧,我只會使用其中之一,而不會使用任何瘋狂的方法來擴展魔術。” 然后,定義對象文字是解決某些問題的完全有效的方法。 有時使用原型會更好。 使用對您要解決的問題有意義的模式,而不是嘗試使問題適合模式。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.