• 语言特性-上下文对象


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

     

  • 相关阅读:
    RSA算法
    本地CodeForces
    基于Giolite 多人开发
    DES算法
    MD5算法
    仓库库存管理系统(C+MySQL+ODBC)
    Spring源码解析(一)开篇
    JDK动态代理实现源码分析
    J.U.C Atomic(一)CAS原理
    JDK 注解详解
  • 原文地址:https://www.cnblogs.com/hometown/p/3204219.html
Copyright © 2020-2023  润新知