我正在创建一个类似的原型类,但我想使用字符串作为函数名来调用函数。我找到了windowname;在某个地方的例子,但它在我的情况下不起作用。
function someObj() {
this.someMethod = function() {
alert('boo');
name = "someOtherMethod";
window[name]();
}
var someOtherMethod = function() {
alert('indirect reference');
}
}
答案 0 :(得分:1)
这是因为"someOtherMethod"
不是window
对象的成员,因为它在someObj
函数中定义。
答案 1 :(得分:0)
window
仅适用于全局变量。
你无法通过字符串访问本地变量,你使用eval
,这几乎总是一个坏主意。
另一种方法是使用对象。这允许您使用字符串查找属性。
function someObj() {
var methods = {};
methods.someMethod = function() {
alert('boo');
var name = "someOtherMethod";
methods[name]();
}
methods.someOtherMethod = function() {
alert('indirect reference');
}
}
答案 2 :(得分:0)
someOtherMethod在窗口中隐藏,仅存在于原型的范围内。
尝试将其移出。
function someObj() {
this.someMethod = function() {
alert('boo');
name = "someOtherMethod";
window[name]();
}
}
var someOtherMethod = function() {
alert('indirect reference');
}
虽然使用全局变量是个坏主意。
答案 3 :(得分:0)
创建自己的方法哈希:
function someObj() {
this.someMethod = function() {
alert('boo');
name = "someOtherMethod";
methods[name]();
}
var methods = {
someOtherMethod : function() {
alert('indirect reference');
}
};
}
您的变量是您的函数的本地变量,因此它不会出现在window
中。即使您在全局范围内工作,最好使用您自己的对象而不是依赖窗口,这样您就可以避免名称冲突。