this在这个命名空间的指向,为什么会改变?

this在这个命名空间的指向,为什么会改变?


第一个this 我认为是common.editTable对象; (事实对的)
第二个我认为也应该是,如果是它就没有init方法,而init方法是在common.editTable.ObjEditTable中的,可输出的结果this是指向common.editTable.ObjEditTable。为什么this变化了? this为什么再是common.editTable这个对象。
输出结果:


穷酸小子 1年前 已收到1个回答 举报

jinhui516 幼苗

共回答了11个问题采纳率:100% 举报

第一个this只是被方法调用,这时它指向create的上级对象,也就是editTable。
第二个this是被构造函数调用了,这时this的作用域会改变,它这里指向的是(new ObjEditTable)这个完整的新生对象,不再是原来的editTable。
参考:
this是js的一个关键字,随着函数使用场合不同,this的值会发生变化。但是总有一个原则,那就是this指的是调用函数的那个对象。
1、纯粹函数调用。
function test() {
this.x = 1;
alert(x);
}
test();
其实这里的this就是全局变量。看下面的例子就能很好的理解其实this就是全局对象Global。
var x = 1;
function test() {
alert(this.x);
}
test();//1
var x = 1;
function test() {
this.x = 0;
}
test();
alert(x);//0
2、作为方法调用,那么this就是指这个上级对象。
function test() {
alert(this.x);
}
var o = {};
o.x = 1;
o.m = test;
o.m(); //1
3、作为构造函数调用。所谓构造函数,就是生成一个新的对象。这时,这个this就是指这个对象。
function test() {
this.x = 1;
}
var o = new test();
alert(o.x);//1
4、apply调用
this指向的是apply中的第一个参数。
var x = 0;
function test() {
alert(this.x);
}
var o = {};
o.x = 1;
o.m = test;
o.m.apply(); //0
o.m.apply(o);//1
当apply没有参数时,表示为全局对象。所以值为0。

1年前

7
可能相似的问题
Copyright © 2024 YULUCN.COM - 雨露学习互助 - 16 q. 0.042 s. - webmaster@yulucn.com