zoukankan      html  css  js  c++  java
  • 语言特性-上下文对象

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

     

  • 相关阅读:
    【HDOJ6687】Rikka with Stable Marriage(Trie树,贪心)
    【CF1244D】Paint the Tree(树形DP,树)
    【HDOJ6681】Rikka with Cake(扫描线,线段树)
    CPU亲和力
    iostat、vmstat和mpstat命令
    sar命令介绍
    Linux网络调试工具
    svn使用入门
    深入探究C/C++基本数据类型
    core文件与gdb调试
  • 原文地址:https://www.cnblogs.com/hometown/p/3204219.html
Copyright © 2011-2022 走看看