javascript - js中this指向问题
本文介绍了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屋!
查看全文