新javascript對象我想創建(使用簡單的繼承)在JavaScript的新對象,使得該對象的類是從變量定義:創建從可變
var class = 'Person';
var inst = new class
任何想法?
新javascript對象我想創建(使用簡單的繼承)在JavaScript的新對象,使得該對象的類是從變量定義:創建從可變
var class = 'Person';
var inst = new class
任何想法?
你可以做這樣的事情
function Person(){};
var name = 'Person';
var inst = new this[name]
的關鍵是隻是引用擁有這就是構造函數的對象。這在全局範圍內工作正常,但如果您將代碼傾倒在函數內部,則可能必須更改引用,因爲this
可能無法工作。
編輯:要傳遞的參數:
function Person(name){alert(name)};
var name = 'Person';
var inst = new this[name]('john')
這次談話是非常有幫助,當我坐進在JavaScript中不同的繼承模式。示例代碼包含在第二個鏈接中(視頻介紹它)。
這裏是我如何做到這一點。與meder的答案類似。
var className = 'Person'
// here's the trick: get a reference to the class object itself
// (I've assumed the class is defined in global scope)
var myclass = window[className];
// now you have a reference to the object, the new keyword will work:
var inst = new myclass('params','if','you','need','them');
非常有幫助。謝謝。這比Meder的答案要好,因爲你可以將'className'作爲參數傳遞給父函數,並且由於蘊涵方法而將它用於任何類。至少,我設定它的方式。 – BarryMode 2016-06-26 22:04:28
我在Node.js中有類似的問題,當我必須根據數據動態創建不同的處理程序對象時。首先,我將所有可用的處理程序(作爲單獨的模塊實現)收集到一個對象中。在一個簡單的情況下,這可以像這樣硬編碼。
var handlers = {
handlerX : require('HandlerX'),
handlerY : require('HandlerY')
};
然後,每當我不得不實例化一個處理程序,我這樣做是這樣的:
var handlername = getHandlerName()
var handler = new handlers[handlername]();
當然,如果你知道這只是工作,或以編程方式確定所有對象你會列表需要創建。
要調用使用功能:
要通過MEDER提高對答案上述
只需將包含您指的是類的範圍替代「本」,例如,如果類是寫在如下全球範圍:
function Person(name){alert(name)};
var name = 'Person';
function classMaker(){
var inst = new window[name]('john');
}
classMaker();
+1非常好的meder – alex 2011-04-30 01:46:56
謝謝!我如何傳遞參數? – yee379 2011-04-30 01:48:21
你也可以使用'apply'來傳遞參數,如果你事先不知道這些參數,這很有用。 'this [name] .apply(null,args)'其中args是一個參數/參數數組。在動態調用函數時,往往會出現這種情況。 – 2011-04-30 13:19:30