js的this的绑定

gogojxj 发布于 2015/03/21 13:58
阅读 184
收藏 0
类似ob.aa=function(fun){},这里的fun是一个函数参数,,,如果让fun函数作用域里的this变成ob,,,,,不能使用function(fun){this.xx=fun;this.xx()}这种方法,大家还有其他方法吗?
加载中
0
Canrz
Canrz
var obj = {
  bb: 1,
  aa: function () {
    console.log(this);
    console.log(this.bb)
  }
}
obj.aa();



gogojxj
gogojxj
这个就是我写的啊,是说参数的this变成主函数的this!
0
名字不能超过十个字
名字不能超过十个字

function that() {
	this.say = function() {
	   console.log(this.a);
	}
}
function me() {
this.a = 'hello';
}
var t = new that();
t.say();//undefined
t.say.call(new me());//hello



是说call和apply?

gogojxj
gogojxj
不是,this.say = function() { console.log(this.a); }也是我开始写的人为绑定
0
wuyiw
wuyiw

我觉得bind是你想要的. 请搜索"js call apply bind".

ps: 似乎IE有版本不支持bind, 需要手动实现(也是基于call/appy实现的, 能搜到), 不确定, 注意一下.

0
yunfound
yunfound

给你写一段示范代码,使用call/apply指定调用者:

var obj = {
  bb: 1,
  aa: function (func) {
     func.call(this);
  }
}

function say(){
  console.log(this.bb);
}
obj.aa(say);

结果输出就是obj.b的值。

或者这样,使用bind将this绑定到指定的调用者:

var obj = {
  bb: 1,
  aa: function (func) {
     func();
  }
}

function say(){
  console.log(this.bb);
}
obj.aa(say.bind(obj));



gogojxj
gogojxj
回复 @yunfound : 谢谢,看了,不过好像机制不是这样的.我去原档看下.
yunfound
yunfound
回复 @gogojxj : http://www.cnblogs.com/wangtao_20/archive/2011/01/01/1923918.html 这里有篇文章可以助你理解!
gogojxj
gogojxj
能告诉下call的机制吗,传入的主体对象是是给主体虚拟绑定了一个零食属性还是?
0
gogojxj
gogojxj

引用来自“yunfound”的评论

给你写一段示范代码,使用call/apply指定调用者:

var obj = {
  bb: 1,
  aa: function (func) {
     func.call(this);
  }
}

function say(){
  console.log(this.bb);
}
obj.aa(say);

结果输出就是obj.b的值。

或者这样,使用bind将this绑定到指定的调用者:

var obj = {
  bb: 1,
  aa: function (func) {
     func();
  }
}

function say(){
  console.log(this.bb);
}
obj.aa(say.bind(obj));



嗯,就是
返回顶部
顶部