javascript - js中this指向问题

查看:79
本文介绍了javascript - js中this指向问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

1、这两个代码的this指向让我懵逼了


2.1、

    var length = 10;
    function fn() {
        console.log(this.length);
    }
    var obj = {
        a: fn,
        length: 5,
        method: function (f) {
            //console.log(this===obj);//true
            f();
            //console.log(arguments)
            //arguments[0]();//
            //arguments[0].call(this);//
            //arguments[0].call(obj);//
        }
    };
    obj.method(obj.a);


2.2、

var name = 'out';
var obj = {
    name: 'in',
    prop: {
        name: 'inside',
        getName: function () {
            return this.name;
        }
    }
};

//console.log(obj.prop.getName());//
var test = obj.prop.getName;//
console.log(test());//


解决方案

this 绑定的是当前对象,必须是直接调用。

非严格模式下

var length = 10;
var fun = function(){
    console.log(this.length);
};
var obj = {
   length : 5,
   test : function(){
     console.log(this.length);
   },
   test2 : fun
}

obj.test(); //5
obj.test2(); //5
fun(); //10 非直接调用,this == undefined;非strict会调用window

严格模式下

'use strict';
var length = 10;
var fun = function(){
    console.log(this.length);
};
var obj = {
   length : 5,
   test : function(){
     console.log(this.length);
   },
   test2 : fun
}

obj.test(); //5
obj.test2(); //5
fun(); //跑出异常,this == undefined;undefined.length 错误

所以:

 var length = 10;
    function fn() {
        console.log(this.length);
    }
    var obj = {
        a: fn,
        length: 5,
        method: function (f) {
            //console.log(this===obj);//true
            f();
            //console.log(arguments)
            //arguments[0]();//
            //arguments[0].call(this);//
            //arguments[0].call(obj);//
        }
    };
    obj.a();
    /*
      5
      因为符合直接调用的模式
    */
    obj.method(obj.a);
    /*
      10
      这里的 obj.a 仅是当作值来传,值为 一个函数
      f();不符合 object.method(),严格模式下报错
    */

var name = 'out';
var obj = {
    name: 'in',
    prop: {
        name: 'inside',
        getName: function () {
            return this.name;
        }
    }
};

//console.log(obj.prop.getName());//
var test = obj.prop.getName;//
console.log(test());//
/*
    out
    和上边一样,也不是 object.method() 这种情况
*/

这篇关于javascript - js中this指向问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆