在Javascript中,我創建這樣一個對象:實例化多個對象
現在,我想能夠實例化這個對象,所以我想這一點:
var myFirstObject = new testObject();
var mySecondObject = new testObject();
,這樣當我打電話給.setup()
時,它只會改變那個被引用的新創建對象的值。我怎樣才能做到這一點?此代碼似乎不起作用。
在Javascript中,我創建這樣一個對象:實例化多個對象
現在,我想能夠實例化這個對象,所以我想這一點:
var myFirstObject = new testObject();
var mySecondObject = new testObject();
,這樣當我打電話給.setup()
時,它只會改變那個被引用的新創建對象的值。我怎樣才能做到這一點?此代碼似乎不起作用。
你不實例化對象,你實例化函數。
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);
});
您使用的對象符號是您可以與靜態類進行比較的東西。 這裏是代碼,你想達到什麼目的:
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/
你必須與你的代碼許多問題。首先,你正試圖通過調用一個構造函數來實例化一些東西。你的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
方法,它將應用到該實例。換句話說,中this
的setup
方法裏面的值將指在其方法被稱爲實例:
myFirstObject.setup();
console.log(myFirstObject.value); // 'foo'
console.log(mySecondObject.value); // 'this is my initial value'
function yourObject(value, setup) {
return {
value: value,
setup: setup
};
}
var myFirstObject = new yourObject('a', function(){});
var mySecond = new yourObject('b', function(){});
您錯誤地定義你的構造。試試這個:
function testObject() {
this.value = "this is my initial value";
this.setup = function() {
this.value = "foo"
}
};
然後您可以撥打new testObject()
。
謝謝。我有一個小問題,不想爲此打開一個新的問題,但是,有沒有辦法將DOM事件綁定到這些對象中的函數?如果這不是一個快速的,那麼我最好打開一個新的問題。 –
檢查我上面的編輯。 – EMMERICH