`

this关键字的作用范围

阅读更多

一个function, 从语法的角度讲,既可以使用括号让其执行,也可以new它,比如

fucntion a(){}

var b = a();

var c = new a();

对 于c来说,a方法同样会执行,需要注意的是,如果a方法有return语句,那么b和c的值都是这个被return的东西;如果a方法根本没有任何 reutrn,那么b的值是undefined,对于c来说,a方法等同于最后会被默认加上一个retrun this,所以c会拿到一个对象。

 

再看另一个方法,

function a() {
    console.log(this);
    this.prototype.test = function(){
        console.log(this);
    }
    this.id=1;
}

如果直接用a()来运行它,等价于window.a();所以打印出来的this就是window,this.id也会给window添加一个id属性并赋值;prototype的那三行会给window对象添加一个叫做test的方法。

 

如果用var b = new a()来运行它,new会产生一个新的this,所以打印出来的就是一个空的a对象;

b.test()会让test方法执行,打印的是一个带有test方法的a对象。

 

---------------------------------------------------------

需要额外注意的是,JS在需要定义callback方法的时候,callback方法默认的执行域是window,所以callback中的this就是window。如果还想使用callback定义的时候的作用于,就要用一个变量来寄存当时的this,比如:

function a() {
    this.test = function(){
        var me = this;
        setTimeout(function(){
            console.log(me);
        },1000);
    }
}

分享到:
评论

相关推荐

    Js作用域和this关键字1

    JavaScript中的作用域和`this`关键字是编程中非常重要的概念,尤其在JavaScript中,它们具有独特的特点和行为。本文将深入探讨这两个概念及其在实际编程中的应用。 首先,我们来看一下**作用域(Scope)**: 作用...

    java关键字及作用

    - **protected**:受保护的关键字,用于扩大成员的可见范围。被`protected`修饰的成员除了在声明该成员的类内部可见外,还可以被同一包内的其他类以及任何子类(无论是否在同一包内)访问。 - **public**:公共...

    【JavaScript源代码】NodeJS和浏览器中this关键字的不同之处.docx

    在JavaScript编程中,`this`关键字是一个至关重要的概念,它在不同的执行环境中有着不同的指向。在浏览器环境和Node.js环境中,`this`的行为差异主要源于它们的执行上下文。让我们深入探讨这个问题。 首先,让我们...

    讨论AspectJ之target、this、within关键字差异性

    这三个关键字在AOP编程中起到了不同的作用,它们帮助开发者精细控制切面的生效范围。`target`关注的是具体的类,`this`关注的是切面自身的实例,而`within`关注的是一个类型或包的整个范围。理解并熟练运用这些...

    java之this关键字用法实例分析

    `this`关键字的使用范围广泛,主要包括以下几个方面: 1. **方法中的引用**: 在类的方法定义中,`this`关键字代表调用该方法的对象的引用。这意味着当你在方法内部使用`this`时,你实际上是在引用创建并调用该...

    JS作用域闭包、预解释和this关键字综合实例解析

    JavaScript中的作用域、闭包和`this`关键字是理解JavaScript高级特性的关键。它们在实际编程中扮演着重要角色,特别是在处理函数、对象和变量生命周期时。 首先,**作用域**指的是变量和函数的可见性范围。在...

    48个关键字

    `this`关键字用于引用当前对象,可以在构造器或方法中引用对象的属性或调用对象的方法。 ### 41. throw `throw`关键字用于抛出异常,可以是系统异常或自定义异常。 ### 42. throws `throws`关键字用于声明方法...

    Java基础之关键字_Java基础之关键字_源码

    - `this`:引用当前对象实例。 - `super`:引用父类的实例。 - `instanceof`:检查对象是否是特定类的实例或其子类。 - `new`:创建新对象。 - `transient`:标记字段,序列化时忽略。 - `native`:声明方法由...

    c++关键字解释大全

    - **用法**:使变量在整个程序生命周期内保持不变,或限制函数的作用范围。 #### static_cast(静态类型转换) - **功能**:`static_cast`用于在基本类型间进行安全的类型转换。 - **用法**:提供了一种更安全的...

    java 关键字解析

    本文将深入探讨Java中的关键字及其作用,帮助初学者更好地理解和应用这些基本概念。 #### 1. 关键字概述 Java的关键字是指那些被赋予了特殊意义的单词,它们不能用作标识符(例如变量名、类名等)。Java中有53个...

    Swift 关键字总结

    9. `private` / `fileprivate` / `internal` / `public` - 访问控制修饰符,用于定义代码的可见性范围。 ```swift private var hiddenVariable = 0 // 只在当前文件内可见 fileprivate var fileScopedVariable = 0 ...

    java的线程同步机制synchronized关键字的理解_.docx

    用法是:synchronized(this){/*区块*/},它的作用域是当前对象。 synchronized 的使用注意事项 1. synchronized 方法可能会对系统性能产生影响, nên尽量避免无谓的同步掌握。 2. 使用 synchronized 关键字时,...

    java中的关键字大全

    `this`关键字用于引用当前对象的实例。 ```java class Person { String name; Person(String name) { this.name = name; } } ``` ##### break `break`用于提前退出循环或`switch`结构。 ```java for (int i ...

    C++中的关键字解析

    - **变量**:在某个作用域范围内可被修改的命名对象。 - **常量**:在程序运行过程中不可改变的值。 #### 六、输入输出 - **输入**:通过“`cin`”和“`>>`”抽取操作符从标准输入流中获取数据。 - **输出**:通过...

    jquery动态高亮关键字(可同时高亮多个)

    因此,你可能需要限制搜索范围,例如只在特定的父元素下进行。 - 高亮操作可能会覆盖其他CSS样式,确保你的高亮样式具有足够的优先级。 - 如果页面有动态加载的内容,可能需要在新内容加载后再次调用高亮函数。 ...

    java编程全部关键字解释

    这只是Java关键字的一部分,还有许多其他关键字,如 `float`, `for`, `if`, `import`, `instanceof`, `new`, `package`, `return`, `static`, `strictfp`, `super`, `this`, `throw`, `throws`, `transient`, `try`,...

    java关键字、保留字

    - **用途**:8位有符号整数类型,取值范围从-128到127。 6. **case** - **用途**:`switch`语句的一部分,用于匹配表达式的值。 7. **catch** - **用途**:与`try`语句结合使用,用于捕获并处理异常。 8. *...

    java关键字大全及解释

    40. `this`: 指代当前对象的引用,常用于区分局部变量和成员变量。 41. `throw`: 抛出一个异常,中断程序执行。 42. `throws`: 声明方法可能会抛出的异常,让调用者处理。 43. `transient`: 修饰符,标记字段不...

Global site tag (gtag.js) - Google Analytics