2012-12-17 200 views
0

在Javascript中,我創建這樣一個對象:實例化多個對象

現在,我想能夠實例化這個對象,所以我想這一點:

var myFirstObject = new testObject(); 
var mySecondObject = new testObject(); 

,這樣當我打電話給.setup()時,它只會改變那個被引用的新創建對象的值。我怎樣才能做到這一點?此代碼似乎不起作用。

回答

2

你不實例化對象,你實例化函數。

var testObject = function() { 
    this.value = "this is my initial value"; 
    this.setup = function() { 
    this.value = "foo"; 
    } 
} 

var myFirstObject = new testObject(); 
var mySecondObject = new testObject(); 

編輯: 按照您的評論,這裏就是你將如何使用這個對象上的功能綁定到DOM:

document.getElementById('idOfElem').addEventListener(
    'click', myFirstObject.clickHandler); 

記住,你不會有任何保證點擊處理程序將在您的對象的上下文中執行(即在您的點擊處理程序中,this可能不是您的testObject實例)。如果您clickHandler打算修改對象的實例變量以任何方式,這是更好地確保像這樣的背景下:

document.getElementById('el').addEventListener('click', 
    function() { 
     myObj.handleClick.apply(myObj, arguments); 
    }); 
+0

謝謝。我有一個小問題,不想爲此打開一個新的問題,但是,有沒有辦法將DOM事件綁定到這些對象中的函數?如果這不是一個快速的,那麼我最好打開一個新的問題。 –

+0

檢查我上面的編輯。 – EMMERICH

0

您使用的對象符號是您可以與靜態類進行比較的東西。 這裏是代碼,你想達到什麼目的:

var testObject = function(val) { 
    this.value = "This is my initial value", 

    if (arguments[0]) { 
     this.value = val; 
    } 
}; 

var first = new testObject(); //uses initial value 
var second = new testObject("hi"); //value = hi 

如果您想編寫使用這個符號類來看看這個:http://ejohn.org/blog/simple-javascript-inheritance/

1

你必須與你的代碼許多問題。首先,你正試圖通過調用一個構造函數來實例化一些東西。你的testObject不是一個函數,所以你會導致一個類型錯誤。您需要更改testObject是沿着這些路線的東西:

var TestObject = function() { 
    this.value = "this is my initial value"; 
}; 
TestObject.prototype.setup = function() { 
    this.value = "foo"; 
}; 

注意到我在標識中使用大寫T ...這是一個構造函數只是最佳實踐。另請注意,我如何在prototype上定義setup方法。這比將其定義爲實例的屬性(使用this.setup)效率更高,因爲只需要在內存中存在該函數的一個副本。

現在TestObject是函數,可以通過與運營商new調用它來實例化:

var myFirstObject = new TestObject(); 
var mySecondObject = new TestObject(); 

當你調用上的TestObject實例的setup方法,它將應用到該實例。換句話說,中thissetup方法裏面的值將指在其方法被稱爲實例:

myFirstObject.setup(); 
console.log(myFirstObject.value); // 'foo' 
console.log(mySecondObject.value); // 'this is my initial value' 
0
function yourObject(value, setup) { 
     return { 
      value: value, 
      setup: setup 
     }; 
} 

var myFirstObject = new yourObject('a', function(){}); 
var mySecond = new yourObject('b', function(){}); 
1

您錯誤地定義你的構造。試試這個:

function testObject() { 
    this.value = "this is my initial value"; 
    this.setup = function() { 
     this.value = "foo" 
    } 
}; 

然後您可以撥打new testObject()