关于JavaScript方法中的this问题
展开全部
最后你把Namespace.PageName.init挂在了window上面的onload事件上了,结果是window来调,也就是说,谁调用这个函数,this就指向它。为了更精确的说明,请看下面:
<body>
<input type="button" id="btn"/>
<script>
var Namespace={};
Namespace.PageName={
CONSTANT_1:false,
CONSTANT_2:11,
method1: function(){
console.log(this.CONSTANT_1);
},
method2: function(){
console.log(this.CONSTANT_2);
},
init:function(){
console.log(this==window);//false
console.log(this==oBtn);//true ,这里的this指向了按钮
}
};
//获取按钮
var oBtn=document.getElementById('btn');
//给按钮加点击事件
oBtn.onclick=Namespace.PageName.init;
/* 结果是this指向了按钮 */
</script>
</body>
还有下面这种方式也会指向window:
<script>
var Namespace={};
Namespace.PageName={
CONSTANT_1:false,
CONSTANT_2:11,
method1: function(){
console.log(this.CONSTANT_1);
},
method2: function(){
console.log(this.CONSTANT_2);
},
init:function(){
console.log(this==window);//true
console.log(this==Namespace.PageName);//false
}
};
var tem=Namespace.PageName.init;
window.tem();
而下面这种情况会指向Namespace.PageName:
<script>
var Namespace={};
Namespace.PageName={
CONSTANT_1:false,
CONSTANT_2:11,
method1: function(){
console.log(this.CONSTANT_1);
},
method2: function(){
console.log(this.CONSTANT_2);
},
init:function(){
console.log(this==window);//false
console.log(this==Namespace.PageName);//true
}
};
window.Namespace.PageName.init();
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询