语言特性-上下文对象
在javascript中,代码总有一个上下文对象(即:代码属于哪个对象)。上下文对象是通过this实现的,这个变量永远指向当前代码所处的对象中。全局对象其实是window对象的属性。
例:<script language="javascript" type="text/javascript">
var obj = {
yes: function() {
this.name = "rxm";
},
no: function() {
this.name = "null";
}
};
alert(obj.name == null); // obj没有name属性。undefined
obj.yes(); //只有调用执行了yes方法后,才能把属性和对象挂钩
alert(obj.name); //rxm
window.no = obj.no;
window.no(); //执行这个方法相当与执行obj.no();
alert(window.name)//null,
alert(obj.name); //只是把obj的no赋给了window.no对象。
</script>
下面这个例子运行的时候是会报错的。上下文对象是很容易出问题的,还好我们有call和apply.
<script language="javascript" type="text/javascript">
function changeColor(color) {
this.style.color = color;
}
changeColor("white"); //报错消息: 'this.style' 为空或不是对象。
//以上报错是因为this所指的对象window没有style属性。
</script>
和constructor一样,call,apply是Function.prototype的方法。每个Function实例都有的。
区分apply,call就一句话, foo.call(this, arg1,arg2,arg3) == foo.apply(this, arguments
补救:var main = document.getElementById("main");
changeColor.call(main, "white"); //call
function setcolor() {
changeColor.apply(main, arguments);//apply
}
setcolor("white");//传参数[组]