今天遇到一个问题,在使用js创建对象时,里面的方法内包含function时,在内部的function里无法调用对象的方法,this无法穿透,this在方法中可以使用,但在往下一层就不可以,解决办法是在方法里使用var obj=this,然后在内部的function里使用obj.fun就可以调用对象的属性方法。
<body>
<div class="">
<a href="javascript:void(0);" id="testFirst">上层</a>
<a href="javascript:void(0);" id="testSec">第二层</a>
<a href="javascript:void(0);" id="testSolve">解决</a>
</div>
</body>
<script type="text/javascript">
var jsObject={
str:"1qaz2wsx?asdfghjkl.",
testFirstThis:function(){
alert(this.str); -----------------1qaz2wsx?asdfghjkl.
},
testSecThis:function(){
$(document).ready(function(){
alert(this.str);----------------undefined
});
},
testSolve:function(){
var obj=this;
$(document).ready(function(){
alert(obj.str);---------------------------1qaz2wsx?asdfghjkl.
});
}
}
$(document).ready(function(){
$("#testFirst").click(function(){
jsObject.testFirstThis();
});
$("#testSec").click(function(){
jsObject.testSecThis();
});
$("#testSolve").click(function(){
jsObject.testSolve();
});
});
</script>
总结与实例:
<body>
<div>
<p class="p1" style="background-color:orange;"> click</p>
<p class="p3" style="background-color:yellow;" onclick= "fun();" action-str="ssss"> click</p>
<p class="p2" style="background-color:green;" onclick= "funClick(this);" action-str="ssss"> click</p>
</div>
</body>
<script type="text/javascript">
//jquery 绑定事件函数中的this指DOM元素,$(this)指该DOM元素的jquery对象
$(document).ready(function(){
$('.p1').on('click',function(){
alert(this);
var innerHTML = $(this).html();
alert(innerHTML);
})
});
// js的this所在的函数是哪个对象的方法调用,该对象就是this所指向的对象
var fun = function(){
debugger;
alert(this); //由于包含this的函数fun是全局的window里的函数,所以this指向window
//alert(this.fun()); // 该处即可调用到fun
}
var funClick = function(v){
debugger;
var strHtml = $(v).html();//onclick绑定事件传入的this,调用onclick的对象是A标签,所以this指向DOM元素,,脚本引擎生成了一个标签实例对象的匿名成员方法,而onclick指向这个方法
var str = $(v).attr("action-str");
alert(str);
}