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

     

  • 相关阅读:
    codeforces 645C. Enduring Exodus
    test markdown
    codeforces 817C Really Big Numbers
    797C C. Minimal string
    ubuntu配置安卓开发环境记录
    常用网址
    Mysql/Oracle/达梦中数据字典表
    Hadoop0.20.2中MapReduce读取gb2312文件出现乱码问题
    凝思磐石4.2系统字符编码的修改
    hadoop学习(三)HDFS常用命令以及java操作HDFS
  • 原文地址:https://www.cnblogs.com/hometown/p/3204219.html
Copyright © 2011-2022 走看看