function Fun(){
this.x = 1;
this.y = 2
}
Fun.prototype.fun1 = funtion(){
window.setTimeout(this.fun2,1000)}Fun.prototype.fun2=function(){
alert(this.x);
}为什么我在 fun1 里面 用延时调用函数 而那个被调用的函数 不能访问 这个类中的属性 有什么办法让他可以访问
this.x = 1;
this.y = 2
}
Fun.prototype.fun1 = funtion(){
window.setTimeout(this.fun2,1000)}Fun.prototype.fun2=function(){
alert(this.x);
}为什么我在 fun1 里面 用延时调用函数 而那个被调用的函数 不能访问 这个类中的属性 有什么办法让他可以访问
var obj = this;
window.setTimeout(obj.fun2,1000)}说明: this 表示当前对象,即Fun!它的作用域在当前函数中fun1
而window.setTimeout 的作用域在函数fun1 外面!!声明变量引用一下this 就可以了
楼主看看 js 闭包 就明白了!
this.x = 1;
this.y = 2
}
Fun.prototype.fun1 = funtion(){
var _self = this;
window.setTimeout(_self.fun2,1000)}Fun.prototype.fun2=function(){
alert(this.x);
}
this.x = 1;
this.y = 2
}Fun.prototype.fun1 = function(){
this.fun2(this.ff)
}Fun.prototype.fun2=function(fun){
fun("1");
}Fun.prototype.ff=function(x){
alert(this.x)
}var f = new Fun();
f.fun1()
那这个呢?
ff里面alert(this.x)
也取不到当前对象的属性
function Fun(){
this.x = 1;
this.y = 2
}Fun.prototype.fun1 = function(){
this.fun2(this.ff,this)
}Fun.prototype.fun2=function(fun,obj){
fun("1",obj);
}Fun.prototype.ff=function(x,obj){
alert(obj.x)
}var f = new Fun();
f.fun1()
</script>
在我的浏览器中没有通过呀,
var _self = this;
window.setTimeout(_self.fun2,1000)是不是应该这样
var _self = this;
window.setTimeout(function(){
_self.fun2();
}, 1000);
this.x = 1;
this.y = 2
}Fun.prototype.fun1 = function(){
this.fun2(this.ff) //这里是将this.ff指向的函数体作为参数传给this.fun2方法.
}Fun.prototype.fun2=function(fun){ //所以这里的fun和Fnu己经没有关系了,当运行fun()的时候,调用它的是window.
//fun("1");
fun.call(this, "1"); //用call更改调用fun的对象(也就是fun内部this的指向)
}Fun.prototype.ff=function(x){
alert(this.x)
}var f = new Fun();
f.fun1()