这两个代码的this指向让我懵逼了
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);
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());//
数据分析师2017-10-01 00:55:58
This points to a problem in js? -PHP Chinese website Q&A-Is this pointing to the problem in js? -PHP Chinese website Q&A
Let’s take a look and learn.
迷茫2017-03-22 09:25:31
1.this指向不看定义的时候在哪,而是看调用的时候指向。obj.method(obj.a)。那么调用的就是obj,而obj在全局作用域里面,所以this指向window或undefined(严格模式)。
2.调用的是test。test在全局作用域,所以name也是全局下的name。如果一定要修改这个指向,可以在这行:
var test = obj.prop.getName.bind(obj); //或者 var test = obj.prop.getName.bind(obj.prop);
再调用的时候就是in或者inside了