语言特性-上下文对象

来源:互联网 发布:js e.pagex 编辑:程序博客网 时间:2024/05/06 05:08

javascript中,代码总有一个上下文对象(即:代码属于哪个对象)。上下文对象是通过this实现的,这个变量永远指向当前代码所处的对象中。全局对象其实是window对象的属性。

例:<scriptlanguage="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.

      <scriptlanguage="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");//传参数[组]

 

原创粉丝点击