JavaScript函数的this属性

一、this详解:

  1、函数内部另一个特殊对象是 this,其行为与 Java 和 C#中的 this 大致相似。

  2、换句话说,this 引用的是函数据以执行操作的对象,或者说函数调用语句所处的那个作用域。

  3、当在全局作用域中调用函数时,this 对象引用的就是 window(是一个对象,而且是js里面最大的对象,是最外围的对象)。

alert(window);//结果[object Window]   是object类型

alert(this);//结果[object Window]   是object类型    因为在window范围下   所以this就是window
  window.color = ‘红色的‘;         //全局的,或者 var color = ‘红色的‘;也行
   alert(this.color);                 //打印全局的 color

    var box = {
        color : ‘蓝色的‘,                 //局部的 color
        sayColor : function () {
            alert(this.color);             //此时的 this 只能 box 里的 color
      }
    };
    box.sayColor();

    alert(this.color);        //还是全局的
  window.color = ‘红色的‘;         //全局的,或者 var color = ‘红色的‘;也行

    function sayColor(){
        alert(this.color);
    }
    sayColor();         //这里调用sayColor,其实还是在window范围下的

    var box={
        color:‘蓝色‘
    }
    box.sayColor = sayColor;
    box.sayColor();//蓝色

二、this应用:

<script type="text/javascript">
    window.onload = function(){
        var aBtn = document.getElementsByTagName(‘input‘);
        var that = null;            // 空

        for(var i=0; i<aBtn.length; i++){
            aBtn[i].onclick = function (){
                this.style.background = ‘yellow‘;    //这里this表示的是aBtn[i],而不是window
            }
        }
    }
</script>
<body>
    <input type="button" value="按钮1" />
    <input type="button" value="按钮2" />
    <input type="button" value="按钮3" />
</body>
<script type="text/javascript">
    window.onload = function(){
        var aBtn = document.getElementsByTagName(‘input‘);
        var that = null;            // 空

        for(var i=0; i<aBtn.length; i++){
                aBtn[i].onclick = fn1;
        }

        function fn1(){
            this.style.background = ‘yellow‘;  //这里this同样表示的是aBtn[i]
        }
    }
</script>
<body>
    <input type="button" value="按钮1" />
    <input type="button" value="按钮2" />
    <input type="button" value="按钮3" />
</body>
<script type="text/javascript">
    window.onload = function(){
        var aBtn = document.getElementsByTagName(‘input‘);
        var that = null;            // 空

        for(var i=0; i<aBtn.length; i++){
            aBtn[i].onclick = function (){

                fn1();         //如果这样调用的话,fn1函数里面的this代表的是window
            }
        }

        function fn1(){
            this.style.background = ‘yellow‘;  //这里this同样表示的是aBtn[i]
        }
    }
</script>
<body>
    <input type="button" value="按钮1" />
    <input type="button" value="按钮2" />
    <input type="button" value="按钮3" />
</body>
<script type="text/javascript">
    window.onload = function(){
        var aBtn = document.getElementsByTagName(‘input‘);
        var that = null;            // 空

        for(var i=0; i<aBtn.length; i++){
            aBtn[i].onclick = function (){
                that = this;
                fn1();      //这里this就表示aBtn[i]
            }
        }

        function fn1(){
            that.style.background = ‘yellow‘;  //这里this同样表示的是aBtn[i]
        }
    }
</script>
<body>
    <input type="button" value="按钮1" />
    <input type="button" value="按钮2" />
    <input type="button" value="按钮3" />
</body>
</head>
<script type="text/javascript">
    window.onload = function (){
        var aLi  = document.getElementsByTagName(‘li‘);
        var that = null;

        for( var i=0; i<aLi.length; i++ ){
            aLi[i].onmouseover = function (){
                //this.getElementsByTagName(‘div‘)[0].style.display = ‘block‘;     //这里this代表的是aLi[i]

                //如果这里要调用外部的方法,将this这个属性赋值给一个变量,然后调用这个函数,那么函数里的this就表示的是aLi[i]它了
                that = this;
                fn1();
            };
            aLi[i].onmouseout = function (){
                this.getElementsByTagName(‘div‘)[0].style.display = ‘none‘;
            };
        }

        function fn1(){
            that.getElementsByTagName(‘div‘)[0].style.display = ‘block‘;
        }
    };
</script>
<style>
li { width:100px; height:150px; float:left; margin-right:30px; background:#f1f1f1; position:relative; z-index:1; }
div { width:80px; height:200px; background:red; position:absolute; top:75px; left:10px; display:none; }
</style>
<body>
    <ul>
        <li>
            <div></div>
        </li>
        <li>
            <div></div>
        </li>
        <li>
            <div></div>
        </li>
    </ul>
</body>
时间: 2024-07-28 21:31:49

JavaScript函数的this属性的相关文章

asp.net控件后台增加JavaScript函数,css属性的方法

GridView1.Attributes.Add("style", "white-space:nowrap;word-wrap:normal "); if (!IsPostBack) { TextBox_rq1.Attributes.Add("onfocus", "WdatePicker()"); TextBox_rq2.Attributes.Add("onfocus", "WdatePicker

JavaScript函数之实际参数对象(arguments) / callee属性 / caller属性 / 递归调用 / 获取函数名称的方法

函数的作用域:调用对象 JavaScript中函数的主体是在局部作用域中执行的,该作用域不同于全局作用域.这个新的作用域是通过将调用对象添加到作用域链的头部而创建的(没怎么理解这句话,有理解的亲可以留言告诉我, 谢谢).因为调用对象是作用域链的一部分,所以在函数体内可以把这个对象属性作为变量来访问. 调用对象的属性包括:用var声明的局部变量,函数形参,还有一种特殊的属性arguments 函数的实际参数:实际参数对象 arguments对象,用来引用实际参数对象.函数的arguments对象并

javascript——对象的概念——函数 1 (函数对象的属性和方法)

一.函数相关的属性: 1.arguments:访问函数的输入参数,由脚本解释器自动创建,具有length属性,可以用序号访问每个参数. 2.callee:arguments的属性,表正在执行的函数对象. 3.calleer:函数对象的属性,表函数对象的父函数对象.

ABP展现层——Javascript函数库

ABP展现层——Javascript函数库 点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之21.ABP展现层——Javascript函数库 ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)”的简称. ABP的官方网站:http://www.aspnetboilerplate.com ABP在Github上的开源项目:https://github.com/aspnetboilerplate ASP.NET Boil

JavaScript函数,作用域以及闭包

JavaScript函数,作用域以及闭包 1. 函数 (1). 函数定义:函数使用function关键字定义,它可以用在函数定义表达式或者函数声明定义. a. 函数的两种定义方式: * function functionName() {} * var functionName = function(){} b. 两种函数定义不同之处 1). 声明提前问题 函数声明语句   :声明与函数体一起提前 函数定义表达式 :声明提前,但是函数体不会提前 请看下面图示:绿色线上面实在js初始加载的时候,查看

javascript 函数重载 overloading

函数重载 https://en.wikipedia.org/wiki/Function_overloading In some programming languages, function overloading or method overloading is the ability to create multiple methods of the same name with different implementations. Calls to an overloaded functi

JavaScript函数部分

 对象: JavaScript的对象字面表示法允许仅仅列出对象的组成部分就能创建对象.这也是json的灵感来源.所谓的对象字面量就是包含在{}中的多组键值对. var stooge={ 'first_name' : 'jack' , 'last_name' : 'ma' }; 取对象内的值可以用stooge['first_name']或者是stooge.first_name. 从undefined的对象中取值是违法的,如stooge.name.me ,此时会报TypeError错误.解决办法是用

Javascript常用对象的属性和方法

javascript为我们提供了一些非常有用的常用内部对象和方法.用户不需要用脚本来实现这些功能.这正是基于对象编程的真正目的. 在javascript提供了string(字符串).math(数值计算)和Date(日期)三种对象和其它一些相关的方法.从而为编程人员快速开发强大的脚本程序提供了非常有利的条件. 1.常用内部对象 在javascript中对于对象属性与方法的引用,有两种情况:其一是说该对象是静态对象,即在引用该对象的属性或方法时不需要为它创建实例:而另一种对象则在引用它的对象或方法是

Javascript 函数及其执行环境和作用域

函数在javascript中可以说是一等公民,也是最有意思的事情,javascript函数其实也是一个对象,是Function类型的实例.因此声明一个函数首先可以使用 Function构造函数: var saySomething = new Function("something","console.log(something)"); saySomething("hello world!"); // 输出hello world! Function