屬性有沒有辦法來調用通過反射的對象上的函數(或屬性),在JavaScript?的JavaScript:調用功能或致電通過反射
比方說,它在運行時,我的代碼已經確定objectFoo確實有一個名爲「酒吧」屬性。現在我的代碼知道了,接下來我想要做的就是調用它。通常我會這樣做:var x = objectFoo.bar。但'bar'是在運行時確定的,所以我需要使用反射來調用它。
屬性有沒有辦法來調用通過反射的對象上的函數(或屬性),在JavaScript?的JavaScript:調用功能或致電通過反射
比方說,它在運行時,我的代碼已經確定objectFoo確實有一個名爲「酒吧」屬性。現在我的代碼知道了,接下來我想要做的就是調用它。通常我會這樣做:var x = objectFoo.bar。但'bar'是在運行時確定的,所以我需要使用反射來調用它。
EVAL: http://www.w3schools.com/jsref/jsref_eval.asp
評估和演示將允許你通過傳遞一個字符串,並具有JavaScript引擎評估它的JavaScript代碼運行任何JavaScript代碼。
如果你的意思是你要首先搜索對象的列表屬性,然後看看這個:
var o = {}
for(att in o){
alert(o[att]);
}
如果你這樣做,你甚至可以通過訪問它,就好像設置該屬性的值就是一個數組(所有對象實際上都是關聯數組)。
obj["propertyName"] = "new value";
obj["MethodName"]();
在JavaScript中,對象方法實際上只是包含函數的屬性。像所有的屬性,你可以參考他們使用關聯數組語法:
var x = { 'a': 1 };
x.a += 1;
x['a'] += 1;
console.log(x.a);
輸出是:3
。
所以,如果你有你想要調用對myObject
方法的名稱:
var methodName = 'myMethod';
// Invoke the value of the 'myMethod' property of myObject as a function.
myObject[methodName]();
我的答案有這個...它有這個和評估。 – 2009-12-22 20:27:02
創建對象(調用構造函數)通過反射:
SomeClass = function(arg1, arg2) {
console.log('Your reflection');
}
ReflectUtil.newInstance('SomeClass', 5, 7);
和實施:
var ReflectUtil = {};
/**
* @param strClass:
* class name
* @param optionals:
* constructor arguments
*/
ReflectUtil.newInstance = function(strClass) {
var args = Array.prototype.slice.call(arguments, 1);
var clsClass = eval(strClass);
function F() {
return clsClass.apply(this, args);
}
F.prototype = clsClass.prototype;
return new F();
};
愛的概念..一個混亂。如何獲得函數的輸出? – Shashi 2016-12-12 08:25:02
使用F12激活瀏覽器控制檯,然後在菜單中選擇「控制檯」。 – 2016-12-12 12:13:36
創建登記對象:
var funcRegister = {};
創建一個函數來調用其他:
var callReflectionFunc = function(type, obj) {
var func = false;
if(funcRegister[type])
func = funcRegister[type](obj);
return func;
}
填寫您的註冊與功能:
funcRegister['yourtype1'] = function(obj) {
console.log('your type 2');
return obj;
}
funcRegister['yourtype2'] = function(obj) {
console.log('your type 2');
return obj;
}
然後用你的類型和對象調用它,你可以把你的ARGS
callReflectionFunc(type, obj);
OMG當然... EVAL。我是個白癡。謝謝你,我應該想到這一點。 – 7wp 2009-12-22 19:12:57
的eval()比你需要做你想做的一個更大的棒。只需使用關聯數組語法:'var propName ='bar'; VAR X = objectFoo [PROPNAME];' – Annabelle 2009-12-22 19:17:31
相關的說明,如果包含該函數的變量的範圍是 「窗口」,則可以使用父[變種](); – sparkey0 2009-12-22 19:25:14