浅谈javascript的this指向
This的指向大致能够分为下面四类。我们分别举例说明
1. 作为对象的方法调用时。this指向该对象
var obj={
a:1,
getA:function(){
console.log( this==obj); //输出true
console.log(this.a); //输出1
}
}obj.getA();
2. 作为普通函数调用时,this总是指向全局对象,比方说在浏览器中,这个全局对象是window。
window.name="windowname";
var getName=function(){
return this.name;
}
console.log(getName()); //输出windwoname
或者
window.name='windowname2';
var myObject={
name:'yourName',
getName:function(){
return this.name;
}
}
var getName=myObject.getName;
console.log(getName()); //windowname
console.log(myObject.getName());//yourName
3. 作为构造器调用
通常情况下,构造器里的this就指向返回的这个对象。比如:
var myClass=function(){
this.name='yourName';
}
var obj=new myClass();
console.log(obj.name); //输出yourName
可是当new调用构造器时。构造器显示的返回了一个object类型的对象。那么此次运算的终于结果会返回这个对象,不是我们之前期待的this。
假设返回的不是对象是别的比方说string类型的数据,就还是指向原来的this
var myClass=function(){
this.name='yourName';
return ’returnName’ ;
}
var obj=new myClass();
console.log(obj.name); //输出'yourName'
4. Function.prototype.call 或 Function.prototype.apply调用能够动态的改变传入的this的值
var obj1={
name:'name1',
getName:function(){
return this.name;
}
}
var obj2={
name:'name2'
}
console.log(obj1.getName()); //输出name1
console.log(obj1.getName().call(obj2)); /输出name2
至此 第一篇博客写完了。 本文中,我们讲了对thiskeyword做了一些简单的分析。也參考了一些书。在此。对他们表示感谢,假设可以帮助到你。我感到万分荣幸。
让大家见笑了
浅谈javascript的this指向的更多相关文章
- 浅谈JavaScript中的闭包
浅谈JavaScript中的闭包 在JavaScript中,闭包是指这样一个函数:它有权访问另一个函数作用域中的变量. 创建一个闭包的常用的方式:在一个函数内部创建另一个函数. 比如: functio ...
- 浅谈javascript的原型及原型链
浅谈javascript的原型及原型链 这里,我们列出原型的几个概念,如下: prototype属性 [[prototype]] __proto__ prototype属性 只要创建了一个函数,就会为 ...
- 浅谈javascript函数节流
浅谈javascript函数节流 什么是函数节流? 函数节流简单的来说就是不想让该函数在很短的时间内连续被调用,比如我们最常见的是窗口缩放的时候,经常会执行一些其他的操作函数,比如发一个ajax请求等 ...
- 浅谈JavaScript浮点数及其运算
原文:浅谈JavaScript浮点数及其运算 JavaScript 只有一种数字类型 Number,而且在Javascript中所有的数字都是以IEEE-754标准格式表示的.浮点数的精度问题 ...
- 浅谈 JavaScript 编程语言的编码规范
对于熟悉 C/C++ 或 Java 语言的工程师来说,JavaScript 显得灵活,简单易懂,对代码的格式的要求也相对松散.很容易学习,并运用到自己的代码中.也正因为这样,JavaScript 的编 ...
- 浅谈JavaScript中的null和undefined
浅谈JavaScript中的null和undefined null null是JavaScript中的关键字,表示一个特殊值,常用来描述"空值". 对null进行typeof类型运 ...
- 浅谈JavaScript中的正则表达式(适用初学者观看)
浅谈JavaScript中的正则表达式 1.什么是正则表达式(RegExp)? 官方定义: 正则表达式是一种特殊的字符串模式,用于匹配一组字符串,就好比用模具做产品,而正则就是这个模具,定义一种规则去 ...
- [转载]浅谈JavaScript函数重载
原文地址:浅谈JavaScript函数重载 作者:ChessZhang 上个星期四下午,接到了网易的视频面试(前端实习生第二轮技术面试).面了一个多小时,自我感觉面试得很糟糕的,因为问到的很多问题都 ...
- 浅谈JavaScript中的内存管理
一门语言的内存存储方式是我们学习他必须要了解的,接下来让我浅谈一下自己对他的认识. 首先说,JavaScript中的变量包含两种两种类型: 1)值类型或基本类型:undefined.null.numb ...
随机推荐
- Linq 简明教程
一个简单的实例 static void Main(string[] args) { string[] names = { "Alonso", "Zheng", ...
- Mac的文件比对工具:Meld、Beyond Compare
Meld开源免费 Beyond Compare可以在Windows.Mac下使用,但是收费,需要自己破解
- XSS-Proxy之技术总结
今天看了大风的文章,关于Cross Iframe Trick的思路.让我想到了曾经看到的关于XSS Proxy的一些文章. Advanced Cross-Site-Scripting with Rea ...
- Git学习资源推荐
Git在线练习 http://pcottle.github.io/learnGitBranching/ https://try.github.io/levels/1/challenges/1 Git入 ...
- 长sql 语句拼接
长sql 语句拼接
- antd-design LocaleProvider国际化
1.LocaleProvider 使用 React 的 context 特性,只需在应用外围包裹一次即可全局生效. import { LocaleProvider } from 'antd'; imp ...
- lua与c++ 中布尔布bool值对应关系
lua代码返回值为真c++ lua_toboolean 返回一个 int lua true = 1 false = 0 c++给lua返回 lua_pushboolean 1 = true 0 = ...
- 【MyBatis学习15】MyBatis的逆向工程生成代码
1. 什么是逆向工程 mybatis的一个主要的特点就是需要程序员自己编写sql,那么如果表太多的话,难免会很麻烦,所以mybatis官方提供了一个逆向工程,可以针对单表自动生成mybatis执行所需 ...
- IIS各种问题汇总
1.不能在此路径中使用此配置节.如果在父级别上锁定了该节,便会出现这种情况.锁定是默认设置的(overrideModeDefault="Deny"),或者是通过包含 overrid ...
- sql 多线程
1.codeproject上面一个多线程执行sql的库. 开发中常常要执行一些耗时的数据操作,比如update.insert.bulk insert.index creation, 若顺序执行,则操作 ...
