美文网首页
Javascript中this的用法

Javascript中this的用法

作者: 前端工程狮_jam | 来源:发表于2018-02-06 11:12 被阅读0次

我们在写js时,特别是用到回调函数时,经常会发现this指代的对象总是可能脱离自己的思路而发生改变。面向对象语言的特性告诉我们this始终指代它的调用者,而在js中回调函数中内部的this默认指向全局环境即最终上下文,所以很多时候我们不作this对象的声明绑定,就会发生指向错误,找不到我们想要的值。

  • 函数声明式,没有return一个对象,此时函数内的this相当于全局window
function test(){
    this.a = 1;
    console.log(a);
}
test(); //1
console.log(a);  //1
console.log(this.a); //1
console.log(window.a); //1

//局部变量
function test(){
    var a = 1;
    console.log(a);  //1
    console.log(this.a); //undefined
}
test();
  • 作为对象方法调用,this指代上级对象
function test(){
    console.log(this.x);
}
var o = {};
o.x = 1;
o.m = test;
o.m(); // 1
  • 作为构造函数调用,this指代new出的对象。构造函数一般首字母大写,需要用new来声明对象,区别普通function
var x = 2;  
function Test() {     
    this.x = 1;  //为了表明这时this不是全局对象
}  
var o = new Test();  
console.log(o.x); // 1
console.log(this.x); //2
  • 函数有return对象的时候,this指向构造函数对象本身。return返回多个值,通过对象的属性访问。
function Test() {   
    this.b = 1; //this = Test{}
    return {
        a: 2
    }
}  

var o = new Test();  
console.log(o.a); // 2
console.log(this.b); //undefined

//在JavaScript构造函数中:如果return值类型,那么对构造函数没有影响,实例化对象返回空对象;如果return引用类型(数组,函数,对象),那么实例化对象就会返回该引用类型;
function Super(a){  
    this.a=a;  
    return 123;  
}  
Super.prototype.sayHello=function(){  
     console.log("Hello")  
}  
function Super1(a){  
     this.a=a;  
     return {a:2};  
}  
Super1.prototype.sayHello=function(){  
     console.log("Hello")  
}  
console.log(new Super(1));      //返回Super{a:1},有原型方法sayHello  
console.log(new Super1(2));     //返回Object{a:2},没有原型方法sayHello  
  • ES6中引入了箭头函数,箭头函数使用操作符=>定义。箭头函数不使用上面4种this绑定规则,而是根据外层作用域来决定this。foo内部的箭头函数创建时,foo函数内this绑定到obj1上,bar(箭头函数)的this也会绑定到obj1上,箭头函数内的this是不能被修改的。
function foo() {
    // this.b = 1; //this = Test{}
    return (a) => {
        console.log(this.a);
    };
}

var obj1 = { a: 2 };
var obj2 = { a: 3 };

var bar = foo.call(obj1);  
bar.call(obj2); //  2

相关文章

  • JavaScript中this用法

    this this是 JavaScript 语言的一个关键字。 它是函数运行时,在函数体内部自动生成的一个对象,只...

  • JavaScript中的this用法

    this在全局中调用时指向的是全局对象。this在函数中调用时指向调用函数的对象,调用函数的在不同情况下有 thi...

  • Javascript中this的用法

    我们在写js时,特别是用到回调函数时,经常会发现this指代的对象总是可能脱离自己的思路而发生改变。面向对象语言的...

  • javascript中的this用法

    前言 this是Javascript语言的一个关键字。它代表函数运行时,自动生成的一个内部对象,只能在函数内部使用...

  • JavaScript中this的用法

    今天去面试,再次被面试官要求解释一下this的用法。但是很遗憾,我对this的理解只局限与把它当成全局变量。因此,...

  • JavaScript中this的用法

    this是 JavaScript 语言的一个关键字。 它是函数运行时,在函数体内部自动生成的一个对象,只能在函数体...

  • JavaScript中forEach的用法相关

    JavaScript中forEach的用法相关 首先说下JavaScript的forEach的标准格式。为数组中的...

  • JavaScript学习(2)call&apply&am

    javascript学习(2)call&apply&bind&eval用法 在javascript中存在这样几种特...

  • JS中this的用法详解

    关键词:JavaScript this 前言 本文总结了几类JavaScript中,this的用法,同大家一起分...

  • 理解Promise in JavaScript

    Promise是JavaScript中的一个核心概念,初学JavaScript,对Promise的概念和用法都比较...

网友评论

      本文标题:Javascript中this的用法

      本文链接:https://www.haomeiwen.com/subject/okfgzxtx.html