有人可以解释这个JavaScript示例的问题,以及如果可能的话如何修复它?
// I can define objects / functions like this.
window['Custom'] = function() { };
//Works...I now have a 'Custom' function in scope... I can now do this...
var c = new Custom(); // WORKS!!
//This does not seem to work!
window['Custom.prototype.msg'] = function(msg) {
alert(msg);
};
// I DO NOT WANT TO DO THIS!
Custom.prototype.msg = function(msg) { alert(msg); };
x.msg("Hello");
//FireFox Error: TypeError: x.msg is not a function...
// HOW DO I FIX THIS!?
答案 0 :(得分:1)
你想:
window.Custom.prototype.msg = function(msg) { ... }
括号表示法采用字符串,但字符串不会被解释为对象图表达式;它只是一个字符串。因此,window["Custom.prototype.msg"]
创建一个名为“Custom.prototype.msg”的全局函数。
编辑 - 这也可以:
window["Custom"]["prototype"]["msg"] = function(msg) { ... }
因此,如果您因某些原因使用这些虚线列表表达式,如果您希望将它们解释为这样,则必须自行解析它们。