什么';这个JavaScript代码有什么问题?

什么';这个JavaScript代码有什么问题?,javascript,web,Javascript,Web,当我单击框时,它没有任何作用。 怎么了?我不知道这样创建原型是否有效。它的书写方式显然是为了替换原型,而不是扩展原型 我会写 var menu = { minibox: document.getElementById("hypt_opContainer"), miniboxoptions: [document.getElementById("hypt_op"), document.getElementById("style_op"), do

当我单击框时,它没有任何作用。

怎么了?

我不知道这样创建原型是否有效。它的书写方式显然是为了替换原型,而不是扩展原型

我会写

var menu = {
        minibox: document.getElementById("hypt_opContainer"),
        miniboxoptions: [document.getElementById("hypt_op"),    
        document.getElementById("style_op"), document.getElementById("js_op")]
 };

Object.prototype = {
       toggleVisibility: function(e) {
           e.style.display = (e.style.display == "none") ? "block" : "none";
       }
   };

menu.miniboxoptions[0].addEventListener("click", menu.minibox.toggleVisibility);

我不知道这样创建原型是否有效。它的书写方式显然是为了替换原型,而不是扩展原型

我会写

var menu = {
        minibox: document.getElementById("hypt_opContainer"),
        miniboxoptions: [document.getElementById("hypt_op"),    
        document.getElementById("style_op"), document.getElementById("js_op")]
 };

Object.prototype = {
       toggleVisibility: function(e) {
           e.style.display = (e.style.display == "none") ? "block" : "none";
       }
   };

menu.miniboxoptions[0].addEventListener("click", menu.minibox.toggleVisibility);

2个问题:并非所有浏览器都支持中的
addEventListener
和参数
e

Object.prototype.toggleVisibility = function(e) {
        e.style.display = (e.style.display == "none") ? "block" : "none";
    };
不是一个元素。它是一个事件对象,因此
e.srceelement
应该在大多数浏览器中使用。更多:


提示:永远不要触摸物体。原型

2问题:并非所有浏览器都支持中的
addEventListener
和参数
e

Object.prototype.toggleVisibility = function(e) {
        e.style.display = (e.style.display == "none") ? "block" : "none";
    };
不是一个元素。它是一个事件对象,因此
e.srceelement
应该在大多数浏览器中使用。更多:


提示:永远不要触摸物体。原型

您是否打算在添加事件侦听器时使用
菜单.miniboxoptions[0]
菜单.minibox
?在我看来,你想把听众放在盒子上。没有标记很难判断。您可以使用
文档.getElementById
别名。这将大大减少您的代码大小。例如:
function$(id){returndocument.getElementById(id);}
。。。然后:
$('hypt_opContainer')
正如答案所指出的,您的代码有两个问题:1。您正在替换
对象。prototype
而不是扩充它,2。您在单击处理程序中误用了
事件
对象。是否打算在添加事件侦听器时使用
菜单.miniboxoptions[0]
菜单.minibox
?在我看来,你想把听众放在盒子上。没有标记很难判断。您可以使用
文档.getElementById
别名。这将大大减少您的代码大小。例如:
function$(id){returndocument.getElementById(id);}
。。。然后:
$('hypt_opContainer')
正如答案所指出的,您的代码有两个问题:1。您正在替换
对象。prototype
而不是扩充它,2。您在单击处理程序中误用了
事件
对象。
e.target
是正确的事件属性
e.srcElement
是微软的专有财产,正在IE9中逐步淘汰。对于跨浏览器支持:
var target=e.target | | e.src元素@Šime yep,关于window.event,情况更糟。从来没有找到一种方法用几句话来表达Object.prototype的威力,是吗?每个对象都继承Object.prototype对象的所有属性。
e.target
是正确的事件属性
e.srcElement
是微软的专有财产,正在IE9中逐步淘汰。对于跨浏览器支持:
var target=e.target | | e.src元素@Šime yep,关于window.event,情况更糟。从来没有找到一种方法用几句话来表达Object.prototype的威力,是吗?每个对象都继承Object.prototype对象的所有属性。