浅析JavaScript中this的用法

真正去解释this这个东西的时候,才发现不是这么简单,花了一些时间,写了几个小demo,让我们来一探究竟。恩,以人为镜,可知得失,看来这句话是很有道理的。

如果是一个全局的function,则this相当于window对象,在function里定义的各种属性或者方法可以在function外部访问到,前提是这个function需要被调用。

 代码如下 复制代码
<script type="text/javascript">
        //在function中使用this
        function a() {
            if (this == window) {
                alert("this == window");
                this.fieldA = "I'm a field";
                this.methodA = function() {
                    alert("I'm a function ");
                }
            }
        }
        a();    //如果不调用a方法,则里面定义的属性会取不到
        alert(window.fieldA);
        methodA();    
</script>

如果使用new的方式去实例化一个对象,则this不等于window对象,this指向function a的实例:

 代码如下 复制代码

<script type="text/javascript">
        //在function中使用this之二
        function a() {
            if (this == window) {
                alert("this == window");
            }
            else {
                alert("this != window");
            }
            this.fieldA = "I'm a field";
        }
        var b = new a();
        alert(b.fieldA);

</script>

使用prototype扩展方法可以使用this获取到源对象的实例,私有字段无法通过原型链获取:

 代码如下 复制代码

<script type="text/javascript">
        //在function中使用this之三
        function a() {
            this.fieldA = "I'm a field";
            var privateFieldA = "I'm a var";
        }

        a.prototype.ExtendMethod = function(str) {
            alert(str + " : " + this.fieldA);
            alert(privateFieldA);   //www.111cn.net出错
        };
        var b = new a();
        b.ExtendMethod("From prototype"); 
</script>

```js

不管是直接引用function,还是实例化一个function,其返回的闭包函数里的this都是指向window。

 代码如下 复制代码

```js
<script type="text/javascript">
        //在function中使用this之四
        function a() {
            alert(this == window);
            var that = this;
            var func = function() {
                alert(this == window);
                alert(that);
            };
            return func;
        }

        var b = a();
        b();
        var c = new a();
        c();
</script>

在HTML中使用this,一般代表该元素本身:

 代码如下 复制代码

<div onclick="test(this)" id="div">Click Me</div>
<script type="text/javascript">
    function test(obj) {
         alert(obj);
    }
</script>

在IE和火狐(Chrome)下注册事件,this分别指向window和元素本身:

 代码如下 复制代码

<div id="div">Click Me</div>
    <script type="text/javascript">     
        var div = document.getElementById("div");
        if (div.attachEvent) {
            div.attachEvent("onclick", function() {
                alert(this == window);
                var e = event;
                alert(e.srcElement == this);
            });
        }
        if (div.addEventListener) {
            div.addEventListener("click", function(e) {
            alert(this == window);
            e = e;
            alert(e.target == this);
            }, false);
        }
    </script>

时间: 2024-10-02 11:31:06

浅析JavaScript中this的用法的相关文章

浅析Javascript中bind()方法的使用与实现_javascript技巧

我们先来看一道题目 var write = document.write; write("hello"); //1.以上代码有什么问题 //2.正确操作是怎样的 不能正确执行,因为write函数丢掉了上下文,此时this的指向global或window对象,导致执行时提示非法调用异常,所以我们需要改变this的指向 正确的方案就是使用 bind/call/apply来改变this指向 bind方法 var write = document.write; write.bind(docum

JavaScript中exec函数用法实例分析

  本文实例讲述了JavaScript中exec函数用法.分享给大家供大家参考.具体如下: javaScript 中的 exec 函数,用正则表达式模式在字符串中运行查找,并返回包含该查找结果的一个数组. rgExp.exec(str) 参数: rgExp 必选项.包含正则表达式模式和可用标志的正则表达式对象. str 必选项.要在其中执行查找的 String 对象或字符串文字. 说明: 如果 exec 方法没有找到匹配,则它返回 null.如果它找到匹配,则 exec 方法返回一个数组,并且更

javaScript中push函数用法实例分析

  本文实例讲述了javaScript中push函数用法.分享给大家供大家参考.具体分析如下: javaScript 中的 push 方法,将新元素添加到一个数组中,并返回数组的新长度值. arrayObj.push([item1 [item2 [. . . [itemN ]]]]) 参数 arrayObj,必选项.一个 Array 对象. item, item2,. . . itemN, 可选项.该 Array 的新元素. 说明 push 方法将以新元素出现的顺序添加这些元素.如果参数之一为数

javaScript中slice函数用法实例分析

  本文实例讲述了javaScript中slice函数用法.分享给大家供大家参考.具体分析如下: javaScript 中的 slice 函数,对于array对象的slice函数,返回一个数组的一段.(仍为数组) arrayObj.slice(start, [end]) 参数: arrayObj,必选项.一个 Array 对象. start,必选项.arrayObj 中所指定的部分的开始元素是从零开始计算的下标. end,可选项.arrayObj 中所指定的部分的结束元素是从零开始计算的下标.

javaScript中with函数用法实例分析

  本文实例讲述了javaScript中with函数用法.分享给大家供大家参考.具体分析如下: javaScript 中的 with 函数 ,即所谓的with 语句,可以方便地用来引用某个特定对象中已有的属性,但是不能用来给对象添加属性,要给对象创建新的属性,必须明确地引用该对象. with 函数,为语句设定默认对象. with (object) statements 参数: object 新的默认对象. statements 一个或多个语句,object 是该语句的默认对象. 说明: with

JavaScript中String.prototype用法

  本文实例讲述了JavaScript中String.prototype用法.分享给大家供大家参考.具体如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 // 返回字符的长度,一个中文算2个 String.prototype.ChineseLength=function() { return this.replace(/[^x00-xff]/g,"**").len

javascript中动态函数用法

  本文实例讲述了javascript中动态函数用法.分享给大家供大家参考.具体分析如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <t

Javascript中With语句用法实例

  本文实例讲述了Javascript中With语句用法.分享给大家供大家参考.具体如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8&qu

javascript中clipboardData对象用法

  本文实例讲述了javascript中clipboardData对象用法.分享给大家供大家参考.具体分析如下: clipboardData对象 ,注意网页里剪贴板到现在只能设置Text类型,即只能复制文本 clearData("Text")清空粘贴板 getData("Text")读取粘贴板的值 setData("Text",val)设置粘贴板的值 当复制的时候body的oncopy事件被触发,直接return false就是禁止复制,注意是不