睡到现在,我们来接着说说测试题,题目要是有不同的见解的可以告诉我,而且题目我都改动了不少加了好多元素,这些题都是我个人的解法。
第一题:
<button id="btn">
点击</button>
var btn=document.getElementById("btn");
var handle={
id:"eventhandle",
exec:function () {
alert(this.id);
}
}
btn.addEventListener('click',handle.exec)
这道题的结果是btn,主要是在按钮上添加了一个监听事件,addeventlistener,当你点击了按钮之后就会调用handle对象里面的exec属性,他对应的是一个方法,this.id,这个this是谁就至关重要了,addeventlistener这个方法用于指向元素中的添加元素事件句柄,(注:还有removeeventlistener,在ie中是attachevent)所以说绑定元素上是什么就是什么。如果说是:
btn.οnclick=function () {
handle.exec()
}
那this就是对象里面的了,结果自然是eventhandle。在下一个博客中我会介绍这个方法。
ps:上面的题就算是把button的id去掉,也不会找到对象中的id的,相反的是会报错。
第二题:
var obj={proto:{a:1,b:2}};
function F(){}
F.prototype=obj.proto;
var f=new F();
obj.proto.c=3;
obj.proto={a:-1,b:-2};
alert(f.a);
alert(f.b);
delete F.prototype['a'];
alert(f.a);
alert(obj.proto.a);
第二题是我们讨论的最久的问题,这道题涉及到了原型,地址。本题的结果是 1,2,undefined,-1。首先先定义了一个对象,其中有一个proto属性,值为一个对象。后有定义了一个F函数。首先是给obj的proto加上了一个c值为3,再这个时候,obj的原型和F的原型指向同一个地址,所以说你的obj改变了自然F也会改变,F中也存在了一个c,后来obj把proto彻底的改成了一个新对象,这里就是解题关键了,因为是修改还是重新赋值?是重新,这一步重新的把obj的proto指向了一个新的地址,所以说你修改后对F的所有都是不影响的。a:1,b:2,c:3。最后而结果就明了了吧。不过修改方式是obj.proto.a=5.那就是把他们都修改成5了。